解题思路:
为了节省空间,全部都用字符串保存数据。
字符串a,b,c分别保存大整数a,b,c;先逆序a,b,然后从低位开始求和一直到最高位即可。
(1)输入a,b;
(2)逆序a,b,并求和放到c中;
(3)逆序c,最后输出结果即可。
注意事项:
注意进位问题,每一步都可能有进位,最后也还会可能有进位。
参考代码:
#include <bits/stdc++.h> using namespace std; const int N=1010; int main() { char a[N],b[N]; //保存大整数a,b char c[N]; //保存最后结果 cin>>a; cin>>b; int lena=strlen(a); //求a的长度 int lenb=strlen(b); //求b的长度 reverse(a,a+lena); //逆序a reverse(b,b+lenb); //逆序b int lenc=lena>lenb?lena:lenb; //c的长度 int min=lena<lenb?lena:lenb; //最小长度 int carry=0; //进位 for(int i=0;i<min;i++) { int temp=(a[i]-'0')+(b[i]-'0')+carry; c[i]=temp%10+'0'; carry=temp/10; } if(lena>lenb) //a比较长,则把a剩余部分放到c中去,但是要考虑进位 { for(int i=lenb;i<lena;i++) { int temp=(a[i]-'0')+carry; c[i]=temp%10+'0'; carry=temp/10; } } else if(lenb>lena) //b比较长,则把b剩余部分放到c中去,但是要考虑进位 { for(int i=lena;i<lenb;i++) { int temp=(b[i]-'0')+carry; c[i]=temp%10+'0'; carry=temp/10; } } if(carry==1) //最后如果有进位 { c[lenc++]='1'; } c[lenc]=0; //字符串结束标记 reverse(c,c+lenc); //逆序c cout<<c; //输出字符串c return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:822 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:640 |
C语言训练-计算一个整数N的阶乘 (C语言代码)浏览:986 |
不容易系列2 (C语言代码)浏览:641 |
简单的a+b (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:1267 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:910 |
DNA (C语言代码)浏览:798 |
链表数据求和操作 (C语言代码)浏览:1035 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:476 |