用c#编写一个程序,以最原始的方法进行两个字符串的四则运算

字符串里面是数值,且不受字数限制。
如两个字符串相加“121343435”+“3453245”,设计的程序是:个位与个位相加,满10进1,十位于十位相加...
如果设计的乘法,也是个位先和个位相乘...完了错开一位相加
采取最原始的方法,就像小学学习四则运算一样,一步一步进行

不能把字符串先转换为int等类型在进行运行,因为int类型储存数值长度短,这个程序设计的意义就是可以进行不受字数限制的四则运算。

谢谢各位大神啦,设计+-*/ ,希望可以多一些注释,尽可能详细。因为刚接触C#,这是课堂作业。超级感谢!!

6个回答

可以看到这个程序超位数运行正常,第一个运行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  直接拼接结果就行   按照这个思路把+ - * \ 写了就行了 相信你
                                }

            }
        }
    }

IOSfengguibin
IOSfengguibin 回复L_leizi: 加油!
接近 5 年之前 回复
L_leizi
Lynn_小花 回复IOS战士: 谢谢,你的想法超级赞,但是我刚学习C#,现在只知道一些语句,其他还没看,这个作业上课要用,时间来不及,
接近 5 年之前 回复
IOSfengguibin
IOSfengguibin 主要给你说说思路 刚开始最好自己去写 会有成就感的 也很锻炼思维能力 对你有帮助 加油
接近 5 年之前 回复
xianfajushi
智者知已应修善业 不限制位数算法等有空再研究一下
接近 5 年之前 回复
         首先设计加法运算:
         * 规则:两个数的对应位相加,从最低的个位开始进行运算(从右到左),逢十进一,进位数与高一位两个数相加后的个位数相加;
         * 取数:字符串本身就是数组,因此,可以直接用序直接取字符串内的任意位置字符,如“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);

来运行超位数加法运行,试看程序是否正常工作,如图
图片说明

再来一次试看,如图:
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐