题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1002
题目要求:
计算大整数的求和
做题思路:
由于这是一道高精度数字计算的题目,unsigned long long double 是不能满足所需要的数字位数的,所以需要别的方法进行计算。
1、首先用两个字符串a[],b[]接受并储存要输入的2个加数;
2、再用两个整型数组x[],y[]分别 倒序 存储输入的两个加数
3、将x[]和y[]的元素对应相加,并存放到z[]中
4、当元素大于9的都进位加1
5、循环输出数组
代码:
#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'; //转化为整型数组
}
for(i = len_b-1;i>=0;i--) {
y[k++] = b[i] - '0';
}
len = len_a>len_b?len_a:len_b;//求a和b数组较大的长度
for(i = 0;i<len;i++) { //求z[]数组,m用来考虑进位情况
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;
}