poj 1503

来源:互联网 发布:网络教育学生能当兵吗 编辑:程序博客网 时间:2024/06/05 05:41

关于高精度的算法,就是输入一百个一百位以内的数字进行相加,只要注意好进位的计数问题这题很简单

#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;}

0 0