acm 关于高精度算法的教训

来源:互联网 发布:淘宝网手机版支付宝 编辑:程序博客网 时间:2024/06/10 03:41

最近刚开始看了几道acm的题,其中有几道是关于高精度算法的,经过多次百度,知道了算法的思路,但是在解题的过程中还是有很多小错误值得引起自己的注意

首先附上代码吧

#include<stdio.h>#include<string.h>#define N 1010int 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循环中尽心;

以上两点是做题中的容易错的地方,总结如上。