【HDOJ】1230 火星A+B

个人觉得这道题没那么水,wa了几次,才发现自己居然没有给srcb数组reset,打错了。搞死啊。

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define MAXNUM 26
 5 int srca[MAXNUM];
 6 int srcb[MAXNUM];
 7 int isPrime[MAXNUM] = {2, 3, 5, 7, 11,13,17,19,23,29,31,37,41,
 8                        43,47,53,59,61,67,71,73,79,83,89,97,101};
 9 
10 
11 void reverse(int a[], int beg, int end) {
12     int tmp, i, k=beg+end-1;
13 
14     for (i=beg; i+i<=k; ++i) {
15         tmp = a[i];
16         a[i] = a[k-i];
17         a[k-i] = tmp;
18     }
19 }
20 
21 void testsrc(int src[], int len) {
22     int i;
23     for (i=0;i<len;++i)
24         printf("%d ", src[i]);
25     printf("\n");
26 }
27 
28 void magicadd(int lena, int lenb) {
29     int ov = 0;
30     int i;
31 
32     reverse(srca, 0, lena);
33     reverse(srcb, 0, lenb);
34 
35     for (i=0; i<MAXNUM; ++i) {
36         srca[i] += (srcb[i] + ov);
37         ov = srca[i] / isPrime[i];
38         srca[i] = srca[i] % isPrime[i];
39     }
40 }
41 
42 int main() {
43     int lena, lenb, flg, tmp;
44     char ch;
45     int i;
46 
47     while (1) {
48         memset(srca, 0, sizeof(srca));
49         memset(srcb, 0, sizeof(srcb));
50         flg = lena = lenb = tmp = 0;
51         while (1) {
52             ch = getchar();
53             if (ch == ' ') {
54                 srca[lena++] = tmp;
55                 flg = 1;
56                 tmp = 0;
57             } else if (ch == ',') {
58                 if (flg)
59                     srcb[lenb++] = tmp;
60                 else
61                     srca[lena++] = tmp;
62                 tmp = 0;
63             } else if (ch == '\n') {
64                 srcb[lenb++] = tmp;
65                 break;
66             } else {
67                 tmp = tmp*10+ch-'0';
68             }
69         }
70         if (lena==1 && lenb==1 && srca[0]==0 && srcb[0]==0)
71             break;
72         magicadd(lena, lenb);
73         i = MAXNUM-1;
74         while (srca[i] == 0)
75             i--;
76         for (; i>0; i--)
77             printf("%d,", srca[i]);
78         printf("%d\n", srca[0]);
79     }
80 
81     return 0;
82 }

 

转载于:https://www.cnblogs.com/bombe1013/p/3616203.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值