问题描述
- 用c#编写一个程序,以最原始的方法进行两个字符串的四则运算
-
字符串里面是数值,且不受字数限制。
如两个字符串相加“121343435”+“3453245”,设计的程序是:个位与个位相加,满10进1,十位于十位相加...
如果设计的乘法,也是个位先和个位相乘...完了错开一位相加
采取最原始的方法,就像小学学习四则运算一样,一步一步进行不能把字符串先转换为int等类型在进行运行,因为int类型储存数值长度短,这个程序设计的意义就是可以进行不受字数限制的四则运算。
谢谢各位大神啦,设计+-*/ ,希望可以多一些注释,尽可能详细。因为刚接触C#,这是课堂作业。超级感谢!!
解决方案
可以看到这个程序超位数运行正常,第一个运行22位,第二个运行46位,可以发现该代码有值得优化的地方,就是超过数字2位数后可以不用循环运算,直接跳出循环,用截取去合成最终结果,可以提高运算速度。
解决方案二:
把思路给你说了把 这样自己去写会有成就感 而且中间太繁琐
第一步: 把字符串的每个字符取出 倒着存进数组 数组Array1 = {5,3,4,3,4,3,1,2,1}; 数组array2= {5,4,2,3,5,4,3};
第二步:两层for循环
// 第一层循环是第一个数每个数都循环一遍
for (int i = 0; i < array1.count; i++) {
// 第二层循环 可以让每个位置对应相加 减 乘 除
for (int j = 0; j < array2.count; j++) {
// 判断符号
if (是 +) {
// 接收这俩个数相加的结果
int num = array1[i] + array2[j];
if (num > 10) {
// 大于10 就给前面一位加1
array1[i + 1] + 1;
int num2 = num - 10;
// 在前面声明一个字符串 一直进行拼接 得到结果
} else {
// 不大于10 直接拼接结果就行 按照这个思路把+ - * 写了就行了 相信你
}
}
}
}
解决方案三:
http://blog.csdn.net/xianfajushi/article/details/40684551
解决方案四:
首先设计加法运算:
* 规则:两个数的对应位相加,从最低的个位开始进行运算(从右到左),逢十进一,进位数与高一位两个数相加后的个位数相加;
* 取数:字符串本身就是数组,因此,可以直接用序直接取字符串内的任意位置字符,如“123456789”[8]获取字符串中的9字;
* 转换:这里只写整数运算int类型的算法;
* 构思:从两个字符串各自的最后一个字符开始取出,直到字符串的第一个字符结束;
* 写一个无限位数字相加的函数来处理,该函数返回运算后的结果,函数需要传递两个字符串数字参数;
* static string 无限位数字相加(string 数字1, string 数字2)
{
string 和 = "";
return 和;
}
* 接着写算式代码:
* int 位1 = 数字1.Length - 1, 位2 = 数字2.Length - 1;
* int 进位值 = 0;
* int 相加值 = int.Parse(数字1[序].ToString()) + int.Parse(数字2[序].ToString()) + 进位值;写法适用于任意位的运算
* 接着写进位的处理:
* int 进位值 = 相加值 > 9 ? 相加值 / 10 : 0;获取进位
* 接着写和输出处理:
* 和 = (相加值 % 10).ToString() + 和;合成
* 这样位的加法运算基本构思结束;
* 接着写循环各位数的处理:
* int 序 = 位1 > 位2 ? 位1 : 位2;
* do
* {
* } while ();
* int 序 = 位1;
* while (--序 >= 0);设置条件
* 接着把处理语句放进循环体内:
* do
* {
* int 相加值 = int.Parse(数字1[序].ToString()) + int.Parse(数字2[序].ToString()) + 进位值;
* 进位值 = 相加值 > 9 ? 相加值 / 10 : 0;
* 和 = (相加值 % 10).ToString() + 和;
* } while (--序 >= 0);
* 第一次调试:string 数字1 = "49", 数字2 = "51";无限位数字相加(数字1, 数字2);观察结果是否按设计意图执行,验证程序正确性;
* 接着写位数读取限制的处理:之上程序在处理相同位数是可以的,当两个字符串长度不同时,应分别进行处理,避免取位错误和超出,修改如下:
* int 序2 = 位2;
* int 相加值 = int.Parse(数字1[序1].ToString()) + (序2 >= 0 ? int.Parse(数字2[序2].ToString()) : 0) + 进位值;
* --序2;
* } while (--序1 >= 0);
* 最后处理字符串长度最长的确保存在数字1中:
* if (数字1.Length < 数字2.Length) { 和 = 数字1; 数字1 = 数字2; 数字2 = 和; 和 = ""; }
* 由于对字符串进行长度存储位置的处理之后,可以对代码进行初步优化,最终代码如下:
*/
static string 无限位数字相加(string 数字1, string 数字2)
{
string 和 = "";
if (数字1.Length < 数字2.Length) { 和 = 数字1; 数字1 = 数字2; 数字2 = 和; 和 = ""; }
int 位1 = 数字1.Length - 1, 位2 = 数字2.Length - 1;
int 进位值 = 0;
do
{
int 相加值 = int.Parse(数字1[位1].ToString()) + (位2 >= 0 ? int.Parse(数字2[位2].ToString()) : 0) + 进位值;/*写法适用于任意位的运算*/
进位值 = 相加值 > 9 ? 相加值 / 10 : 0;/*获取进位*/
和 = (相加值 % 10).ToString() + 和;/*合成*/
--位2;
} while (--位1 >= 0);
if (进位值 > 0) 和 = 进位值.ToString() + 和;/*最后合成*/
return 和;
}
主函数调用:
string 数字1 = "49", 数字2 = "151";
无限位数字相加(数字1, 数字2);
解决方案五:
来运行超位数加法运行,试看程序是否正常工作,如图
时间: 2025-01-01 02:08:04