声明:本文引自一篇优质题解:
编译环境:
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 人评分
假币问题 (C++代码)(向上取整的一种处理方式)浏览:1660 |
震宇大神的杀毒软件 (C语言代码)浏览:1240 |
简单的a+b (C语言代码)浏览:489 |
Tom数 (C++代码)浏览:825 |
C二级辅导-计负均正 (C语言代码)浏览:647 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:490 |
剔除相关数 (C语言代码)浏览:1008 |
C语言训练-亲密数 (C语言代码)浏览:682 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:652 |
C二级辅导-统计字符 (C语言代码)浏览:476 |
cpython3 2019-01-07 22:29:43 |
你才是这个系统的背后大神啊!