ZOJ 1292 Integer Inquiry

来源:互联网 发布:天翼飞young软件下载 编辑:程序博客网 时间:2024/05/01 01:29

ZOJ   1292 Integer Inquiry {4405}

       话说这个题做了2天,现在越来越觉得方法的重要性,也能自己想到一些方法去实现。所以有的时候题目的思路就需要时间去一点点更改或者完善。

       题意:给出最多100个很大的整数,输出这些超大整数的和。

       思路:最主要的思路是用字符接收并且反转,因为每个数字的位数不一样,要从每个数字的最后一位冲齐做满十进一这样比较简单。

       代码注释写有特别要注意的细节情况:

      

#include<stdio.h>#include<string.h>int main(){int i,j,k,n,N,g[200],sum[200],m,max,t,h;char a[200];scanf("%d",&N);for(i = 1;i<=N;i++){for(k = 0;k<=150;k++){sum[k] = 0;}max = 0;for(j = 1;;j++){getchar();scanf("%s",a);    m = strlen(a)-1;    if(a[0]=='0'&&m==0)break;for(k = 0;k<=m;k++){  //数字会出现开头有 0 的情况if(a[k]!='0')break;}h = k;for(k = 0;k<=m-h;k++){a[k] = a[k+h];}m = m-h;if(m>max)max = m;for(k = 0;k<=m;k++){g[k] = a[k]-'0';}for(k = 0;k<=m/2;k++){  //数字反转t = g[m-k];g[m-k] = g[k];g[k] = t;}for(k = 0;k<=m;k++){   //下标处理到本次收进的数字长度sum[k] = sum[k]+g[k];if(sum[k]>=10){sum[k+1] = sum[k+1]+sum[k]/10;sum[k] = sum[k]%10;}}for(k = 0;k<=max;k++){  //但是下标一定要处理到所有收进的数字的最大长度,比如999+1;if(sum[k]>=10){sum[k+1] = sum[k+1]+sum[k]/10;sum[k] = sum[k]%10;}}if(sum[max+1]>0){   //进位max++;}if(sum[max+1]>=10){   //最多可能近进 2 位sum[max+2] = sum[max+2]+sum[max+1]/10;sum[max+1] = sum[max+1]%10;max++;}}for(k = max;k>=0;k--){printf("%d",sum[k]);}printf("\n");if(i!=N)printf("\n");}return 0;}


 

 

原创粉丝点击