大数加法~HDU 1002 A + B Problem II
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1002
题意:
数学题,A+B;
思路,这个数非常大,普通加法一定会超时,所以用大数加法。大数加法的基本思路是模拟我们做加法的时候的进位思想,从最低位开始模拟,
在我的代码里
v -- 进位, tmp -- 当前位2个数的和,k -- 答案数组的下标。
其中, tmp/10 可以得到要进的位数, 同理,tmp%10可以得到个位,就是答案数组对应的位
下面是AC代码:
#include <iostream> #include <cstdio> #include <string.h> using namespace std; const int MX = 1000+10; char a[MX], b[MX]; int c[MX]; int main() { int cas = 0; int T; scanf("%d", &T); while(T--) { memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); scanf("%s %s", &a, &b); int lena = strlen(a); int lenb = strlen(b); int tmp; int v = 0, k = 0; for(int i = lena-1, j = lenb-1;; --i, --j) { if(i < 0 && j < 0) break; if(i < 0) tmp = b[j]-'0'+v; else if(j < 0) tmp = a[i]-'0'+v; else tmp =(a[i]-'0')+(b[j]-'0')+v; c[k] = tmp % 10; //取个位 v = tmp/10; //取要进的位 if(((i == 0)&&(j <= 0) || (j == 0)&&(i <= 0)) && v != 0) c[++k] = v; k++; } printf("Case %d:\n", ++cas); printf("%s + %s = ", a, b); for(int i = k-1; i >= 0; --i) printf("%d", c[i]); if(T) printf("\n\n"); else printf("\n"); } }
如有疑问,欢迎评论指出!
化繁为简 大巧不工