首页 新闻 会员 周边 捐助

ACM 1002 的题目,,我用C写的,但是输出就是有问题。。。帮忙看看

1
悬赏园豆:10 [已解决问题] 解决于 2013-04-28 18:39
 1 #include<stdio.h>
 2 #include<string.h>
 3 void add(char a[], char b[])
 4 {
 5     char c[1002]={' '};
 6     int len_a=strlen(a), len_b=strlen(b);
 7     int i=len_a;
 8     int j=len_b;
 9     int temp=0, flag=0;
10 
11         for( ; i>0 ; i--)
12         {
13             if(j>0)
14             {
15                 temp=a[i-1]-'0'+b[i-1]+flag-'0';
16                 j--;
17             }
18             else 
19                 temp=a[i-1]+flag-'0';
20             if(temp>=10)
21                 flag=1;
22             else 
23                 flag=0;
24             temp=temp%10;
25             c[i]=temp+'0';
26         }
27         
28     if(flag==1) c[0]='1';
29     for(i=0; i<=len_a; i++)
30     {
31         if(c[i]!=' ') printf("%c",c[i]);
32     }
33     printf("\n");
34 }
35 
36 int main()
37 {
38     char a[1001], b[1001];
39     int i, j, n;
40     int len_a, len_b;
41     scanf("%d", &n);
42     for(i=0;i<n;i++)
43     {
44         scanf("%s", &a);
45         len_a=strlen(a);
46         scanf("%s", &b);
47         len_b=strlen(b);
48         printf("Case %d:\n%s + %s = ", i+1, a, b);
49         if(len_a>=len_b)
50             add(a,b);
51         else
52             add(b,a);
53         if(i+1!=n)
54             printf("\n");
55 
56     }
57     return 0;
58 }

 

 题目

http://acm.hdu.edu.cn/showproblem.php?pid=1002

 

 

 

 

 

其他地方应该没问题,就是输出的地方,用%d,%c...都不行,,不知道怎么控制。。。。

如果是两个大数位数不相同的话,,那么就会出错。。。。

 

想了很久,想不出来

ACM
Geekers的主页 Geekers | 初学一级 | 园豆:180
提问于:2013-04-27 22:00
< >
分享
最佳答案
0

看着 C语言就烦,自己单步调一下, 估计错误是在 char c[1002]={' '}(1002位置是SPACE, ASCII是32 ,而显示错误是正好ASCII 小于 42 ).

 

-------------------------------

PS: 搞ACM 最好就别用 C了, JAVA 多好,短平快, 这道题目,java 就直接 一个 BigInteger 搞定就行了 3行代码啊!!

西门吹风 | 菜鸟二级 |园豆:202 | 2013-04-28 08:03

谢谢了。问题已经解决是temp=a[i-1]-'0'+b[i-1]+flag-'0';

i改为j 就可以

Geekers | 园豆:180 (初学一级) | 2013-04-28 08:45
其他回答(1)
1

没帮你解决你的问题,提个建议吧。高精度算法不是你这么写的。。用int数组存结果的话会更好算,你这样存ASCII码太蛋疼了。。而且一般采用的倒序存储。建议你看看别人的高精度代码。。。

收获园豆:10
极米稀饭 | 园豆:212 (菜鸟二级) | 2013-04-28 02:26

谢谢了。问题已经解决是temp=a[i-1]-'0'+b[i-1]+flag-'0';

i改为j 就可以

支持(0) 反对(0) Geekers | 园豆:180 (初学一级) | 2013-04-28 08:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册