Lynn_小花
2015-10-06 13:51
采纳率: 50%
浏览 3.8k

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

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

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • 智者知已应修善业 2015-10-08 03:19
    已采纳

    可以看到这个程序超位数运行正常,第一个运行22位,第二个运行46位,可以发现该代码有值得优化的地方,就是超过数字2位数后可以不用循环运算,直接跳出循环,用截取去合成最终结果,可以提高运算速度。

    点赞 打赏 评论
  • IOSfengguibin 2015-10-06 14:43

    把思路给你说了把 这样自己去写会有成就感 而且中间太繁琐

    第一步: 把字符串的每个字符取出 倒着存进数组 数组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  直接拼接结果就行   按照这个思路把+ - * \ 写了就行了 相信你
                                    }
    
                }
            }
        }
    
    
    点赞 打赏 评论
  • 智者知已应修善业 2015-10-07 02:07
    点赞 打赏 评论
  • 智者知已应修善业 2015-10-08 02:58
             首先设计加法运算:
             * 规则:两个数的对应位相加,从最低的个位开始进行运算(从右到左),逢十进一,进位数与高一位两个数相加后的个位数相加;
             * 取数:字符串本身就是数组,因此,可以直接用序直接取字符串内的任意位置字符,如“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);
    
    点赞 打赏 评论
  • 智者知已应修善业 2015-10-08 03:08

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

    点赞 打赏 评论
  • 智者知已应修善业 2015-10-08 03:12

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

    点赞 打赏 评论

相关推荐 更多相似问题