声明:本文引自一篇优质题解:
编译环境:
Windows China HuaWei source Insight 4.0
Linux Debain Ubuntu/Kali g++
程序测试:
解题思路:
基本思路为使用一个数组将所需要求得大数字存起来,然后进行倒序相加,发现超过十之后取模进位,再倒序输出去多余的0即可。
按从低位到高位的顺序两个数字的每一位对应相加,并加上低一位的进位(如果有进位的话),如果某一位对应的数字加起来大于10,就对10取模得到当前位上的数字,再向高位进1,然后再考虑更高一位数字的相加,依次类推,如果位数较长的那个数字的最高位还有进位,别忘记了位数还要增加1。
推导图:
注意事项:
利用string可以更方便把数据传递给主函数,主函数只需要进行调用,而使用char[]虽说不是不能传递,但是相比string而言传递更加麻烦,麻烦则不方便主函数进行调用,可以见的,string在输出的时候直接cout即可,而char[]还要配合循环使用。
参考代码:
#include <iostream> #include <string> using namespace std; string BigNumAdd(string,int,string ,int); //函数声明 int main() { string a,b; //用字符串来保存数据 C语言的朋友可以用char * cin>>a>>b; if(a.size()<b.size()) //作用:把长串放在a中 短串放在b中 最终结果是存在a中 { string temp=a; a=b; b=temp; } cout<<BigNumAdd(a,a.size(),b,b.size())<<endl; //函数调用 return 0; } string BigNumAdd(string a,int lena,string b,int lenb) { int aa,bb,sum,flag=0; //flag进位标志,默认为0 while(lena>0) { aa=a[lena-1]-'0'; //将a字符串的最后一个字符变成数字 if(lenb>0) bb=b[lenb-1]-'0'; //将b字符串的最后一个字符变成数字 else bb=0; sum=aa+bb+flag; //sum用来保存a和b最后一个数字相加并加上进位 if(sum>=10) //相加大于10 当然要进位 { a[lena-1]='0'+sum%10; flag=1; //进位标志设为1 } else { a[lena-1]='0'+sum; flag=0; } lena--; lenb--; } if(flag==1) //如果最高位的前面还有进位 a="1"+a; //则字符串追加 把1追加到a字符串的前面 return a; //返回a作为 相加的结果 }
0.0分
17 人评分
A+B for Input-Output Practice (IV) (C语言代码)浏览:509 |
上车人数 (C语言代码)浏览:767 |
简单的a+b (C语言代码)浏览:596 |
WU-判定字符位置 (C++代码)浏览:1395 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:526 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:468 |
蛇行矩阵 (C语言代码)浏览:498 |
分糖果 (C语言代码)浏览:911 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:542 |
找出最长的字符串来 (C语言代码)浏览:1760 |
cpython3 2019-01-07 22:29:43 |
你才是这个系统的背后大神啊!