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

问题描述

用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);

解决方案五:

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

解决方案六:

再来一次试看,如图:

时间: 2024-08-25 20:15:41

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

算法 优化-编写一个函数,该函数将筛选出两个字符串参数中相同的字符,并按字母序进行排序后返回

问题描述 编写一个函数,该函数将筛选出两个字符串参数中相同的字符,并按字母序进行排序后返回 本题是某欧外企面试题,下面给出一个我当时的C语言解法,希望请教各位高手们更为高效的解法. char *func(const char *s1, const char *s2) { char temp[256];//ascii_table memset(temp, 0, sizeof(temp)); char *p1 = s1, *p2 = s2; int len = 0; for(; *p1!=0; p1

c语言-编写一个程序,打印输入中的单词长度的直方图。垂直方图。

问题描述 编写一个程序,打印输入中的单词长度的直方图.垂直方图. 直方图是如何理解????求教这道题~~ 这道题目是书上的!有没有懂的大神.给讲解啊. 解决方案 问题是怎么解决的? 我想到的就是算好格式用printf()一行行的输入,最后拼成直方图.

源代码-请求高手为我用C++编写一个程序

问题描述 请求高手为我用C++编写一个程序 要求:(1)可以秒控 (2)可以括兵营 (3)免抓数据包 (4)要全部源代码 写好以后发ilovejunhongjing@163.com 解决方案 首先把需求描述清楚,这样大家才好帮你 解决方案二: 题目要求都没,这东西得自己动手哈

c++-//编写一个程序,最多将10个donation值读入到一个double数组中。

问题描述 //编写一个程序,最多将10个donation值读入到一个double数组中. #include int main() { using namespace std; int donation; double average; int sum; int c,i; for(i=1;i<=10;i++) { while(isdigit(donation)) cout<<"Enter "< cin>>donation[i]; sum+=donati

此程序是 程序-编写一个程序,打印输入中各个字符出现频度的直方图

问题描述 编写一个程序,打印输入中各个字符出现频度的直方图 #include /* NUM_CHARS should really be CHAR_MAX but K&R haven't covered that at this stage in the book / #define NUM_CHARS 256 int main(void) { int c; long freqarr[NUM_CHARS + 1]; long thisval = 0; long maxval = 0; int t

c++-C++编写一个程序,输入一个广义表,对广义表遍历并且计算广义表的个数。

问题描述 C++编写一个程序,输入一个广义表,对广义表遍历并且计算广义表的个数. C++编写一个程序,输入一个广义表,对广义表遍历并且计算广义表的个数. 解决方案 http://blog.csdn.net/jack_wong2010/article/details/6910200

求解:编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。

问题描述 求解:编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数. #include #include #include int main(void) { int i; while(scanf("%d",i)) { for(int j=1;j<=i;j++) { for(int k=1;k<j;k++) { if(j%k==0) continue; else goto line; } line: printf("there are %d"

c语言-编写一个程序遇到的疑问

问题描述 编写一个程序遇到的疑问 #include int main() { float t = 0; float invalue; float average; char ch; float all = 0; for (;;) { printf("请输入数据:"); scanf("%f", &invalue); all = all + invalue; printf("%fn", all); t = t + 1; printf(&quo

加密-编写 一个程序vxworks下的简单程序

问题描述 编写 一个程序vxworks下的简单程序 编写 一个程序vxworks下的简单程序,可以与加密狗关联,在没有加密狗的情况下,系统无法启动. 解决方案 编写一个简单的C++程序编写一个简单的servlet小程序Vim 编写一个简单程序