HDU - 1002 A + B Problem II (大整数加法)
一道很基础的大整数加法。
简单的说一下思路吧。
先用字符串读取两个大数。首先需要把数组给初始化为0方便以后处理,然后对数组逆序对齐处理,接着相加转化后的两个数组并把之存进结果数组里面,最后对结果数组进行进位处理。
看代码吧。
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #include <queue> #include <stack> #define LL long long #define mem(a) memset(a,0,sizeof(a)) using namespace std; char A[1005],B[1005]; int a[1005],b[1005],c[1005]; void nixu() { mem(a); mem(b); mem(c); int k,len=0; k=strlen(A); for(int i=k-1;i>=0;i--) a[len++]=A[i]-'0'; k=strlen(B); len=0; for(int i=k-1;i>=0;i--) b[len++]=B[i]-'0'; return ; } void slove() { int k; k=strlen(A)>strlen(B)?strlen(A):strlen(B); for(int i=0;i<k;i++) c[i]=a[i]+b[i]; for(int i=0;i<k;i++) { if(c[i]>9) { c[i+1]+=c[i]/10; c[i]=c[i]%10; } } } int main() { int T,flag,i=1; scanf("%d",&T); while(T--) { flag=0; scanf("%s%s",A,B); nixu(); slove(); printf("Case %d:\n%s + %s = ",i++,A,B); for(int i=1000;i>=0;i--) { if(c[i]!=0||flag==1) { printf("%d",c[i]); flag=1; } } printf("\n"); if(T!=0) printf("\n"); } }