題目鏈接:
http://acm.hdu.edu.cn/showproblem.php?pid=1002
題目要求:
計(jì)算大整數(shù)的求和
做題思路:
由于這是一道高精度數(shù)字計(jì)算的題目谴仙,unsigned long long double 是不能滿足所需要的數(shù)字位數(shù)的彤守,所以需要?jiǎng)e的方法進(jìn)行計(jì)算针肥。
1逐样、首先用兩個(gè)字符串a(chǎn)[],b[]接受并儲存要輸入的2個(gè)加數(shù)恬叹;
2、再用兩個(gè)整型數(shù)組x[],y[]分別 倒序 存儲輸入的兩個(gè)加數(shù)
3眠蚂、將x[]和y[]的元素對應(yīng)相加宠纯,并存放到z[]中
4、當(dāng)元素大于9的都進(jìn)位加1
5柱告、循環(huán)輸出數(shù)組
代碼:
#include "stdio.h"
#include "string.h"
int main() {
char a[1000],b[1000];
int x[1000],y[1000],z[1005];
int n,p = 0,i,j,k,m,len_a,len_b,len;
scanf("%d",&n);
while(n--){
memset(x,0,sizeof(x)),memset(y,0,sizeof(y)),memset(a,0,sizeof(a)),memset(b,0,sizeof(b));//元素初始化為0
scanf("%s %s",a,b);
j = 0,k = 0,m = 0;
len_a = strlen(a);
len_b = strlen(b);
for(i = len_a-1;i>=0;i--) {
x[j++] = a[i] - '0'; //轉(zhuǎn)化為整型數(shù)組
}
for(i = len_b-1;i>=0;i--) {
y[k++] = b[i] - '0';
}
len = len_a>len_b?len_a:len_b;//求a和b數(shù)組較大的長度
for(i = 0;i<len;i++) { //求z[]數(shù)組截驮,m用來考慮進(jìn)位情況
z[i] = (x[i]+y[i]+m)%10;
if(x[i]+y[i]+m >= 10)
m = 1;
else
m = 0;
}
//輸出
printf("Case %d:\n",++p);
printf("%s + %s = ",a,b);
if(x[len_a-1]+y[len_b-1]+m >= 10)
printf("1");
for(i = len-1;i>=0;i--)
printf("%d",z[i]);
printf("\n");
if(n!=0)
printf("\n");
}
return 0;
}