关于高精度的算法,就是输入一百个一百位以内的数字进行相加,只要注意好进位的计数问题这题很简单
#include<stdio.h> #include<string.h> int main() { char sum[105]={0};//100个包含100位的数字相加结果最多有103位所以定义sum位103位 char s[110];//通常这里会定义大一点的数组来存放字符串主要是防止溢出 int i,j,len,c; scanf("%s", s); while(1) { //结束条件 if(s[0]=='0' && strlen(s)==1) break; //当输入位数为一位且输入为‘0’结束 len = strlen(s);//计算输入字符串长度 c=0; //将本次输入 累加进结果中 for(i=len-1,j=0; i>=0; i--,j++)//将输入的字符串进行翻转相加,加进sum中 { sum[j] += s[i]-'0' + c;//c为进位 c = sum[j]/10;//判断是否相加大于10,进行进位处理有进位 sum[j]=sum[j]%10;//如果有进位则将个位存入sum,否则直接存入; } //处理累加结束后遗留的进位 while(c>0) { sum[j]+=c;//将最后的进位进行处理 c=sum[j]/10;//处理方法同一次相加一样 sum[j]=sum[j]%10; j++; } scanf("%s", s);//继续输入下一组数据 } i=102; //去掉前面的0 while(sum[i]==0) i--; //打印结果 if(i<0) printf("%d\n",0); else { while(i>=0) printf("%d", sum[i--]); printf("\n"); } return 0; }