UVA 424
本题类似于udoj上的A+B2,是大数相加的问题,用高精度,把数字用字符串接收,然后放入数组依次想加再输出
View Code
1 #include<stdio.h>//本题类似于A+BⅡ 2 #include<stdlib.h> 3 #include<string.h> 4 void zhuanhua(char *s,int *a)//将字符串中字符转化为数值存在数组中 5 { 6 int i,j=0; 7 while(*s) 8 { 9 s++; 10 j++; 11 } 12 s--; 13 for(i=0;i<j;i++) 14 { 15 a[i]+=(*s)-'0'; 16 s--; 17 } 18 return; 19 } 20 int main() 21 { 22 int sum[120],i=0,j,len,a[120],leng; 23 char str[120]; 24 for(i=0;i<120;i++) 25 sum[i]=0; 26 while(scanf("%s",str),strcmp(str,"0")) 27 { 28 i=0; 29 while(str[i]=='0')i++;//防止字符串前i位是无效零 30 leng=strlen(str)-i;//记录数值长度 31 zhuanhua(&str[i],sum);//sum进行初始化 32 while(scanf("%s",str),strcmp(str,"0")) 33 { 34 for(i=0;i<120;i++) 35 a[i]=0; 36 j=i=0; 37 while(str[i]=='0')i++; 38 zhuanhua(&str[i],a); 39 len=strlen(str)-i; 40 if(leng>len) 41 len=leng;//如果要加上的数值较短,则交换 42 while(j<len) 43 { 44 sum[j]+=a[j]; 45 if(sum[j]>=10) 46 { 47 sum[j]=sum[j]-10; 48 sum[j+1]++; 49 }//超过十就上位进一 50 j++; 51 } 52 while(sum[len]>9) 53 { 54 sum[len]=sum[len]-10; 55 sum[len+1]+=1; 56 len++; 57 }//使len循环到最后一位,方可全部输出 58 } 59 break; 60 } 61 for(i=119;i>=0;i--) 62 if(sum[i]!=0)break; 63 for(len=i;len>=0;len--) 64 printf("%d",sum[len]);//倒序输出 65 printf("\n"); 66 system("pause"); 67 return 0; 68 }