最近刚开始看了几道acm的题,其中有几道是关于高精度算法的,经过多次百度,知道了算法的思路,但是在解题的过程中还是有很多小错误值得引起自己的注意
首先附上代码吧
#include<stdio.h>
#include<string.h>
#define N 1010
int main(void) {
char num1[N],num2[N];
int length1,length2,c,k,i;
while(scanf("%s%s",num1,num2) == 2) {
int a[N] = {0},b[N] = {0};
length1 = strlen(num1);
length2 = strlen(num2);
if(length1 < length2) {
k = length2;
}else {
k = length1;
}
c = k;
for(i=0; i<length1; k--,i++) {
a[k] = num1[length1 - 1 - i] - '0';
}
for(i=0,k=c; i<length2; k--,i++) {
b[k] = num2[length2 - 1 - i] - '0';
}
for(i=c; i>0; i--) {
a[i] += b[i];
if(a[i]>=10) {
a[i] -= 10;
a[i-1]++;
}
}
if(a[0] != 0) {
for(i=0; i<=c; i++) {
printf("%d",a[i]);
}
}else {
for(i=1; i<=c; i++) {
printf("%d",a[i]);
}
}
printf("\n");
}
return 0;
}
这个是正确的代码,
1有几次在做的时候,忘记了初始化a和b数组,使得计算的的结果不争取
2,就是在while循环中,没有注意到a和b数组的初始化,因为经过一次while循环后a和b数组初值已经不是0了,所以初始化要在while循环中尽心;
以上两点是做题中的容易错的地方,总结如上。