UVA 424

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=365

本题类似于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 } 

 

posted @ 2013-02-18 11:19  执着追求的IT小小鸟  阅读(150)  评论(0编辑  收藏  举报