hdu 1230 火星A+B

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1230

火星A+B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10638    Accepted Submission(s): 3550


Problem Description
读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……
 

 

Input
测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。
 

 

Output
对每个测试用例输出1行,即火星表示法的A+B的值。
 

 

Sample Input
1,0 2,1
4,2,0 1,2,0
1 10,6,4,2,1
0 0
 

 

Sample Output
1,0,1
1,1,1,0
1,0,0,0,0,0
 
题目大意:这是我一次比赛,差这一题ak的,无奈,当时说了一句,我一个地球人,怎么知道火星a+b怎么算,比赛结束后,看了下这题是麻烦了些哈~~
把字符转换一下,然后按照大数的思想做下去就ok了,不过我还是转换了好久,把数字一位一位的拿出来,在倒叙相加,最后在倒着输出来!!
 
详见代码。
 
 1 #include <iostream>

 2 #include <cstdio>

 3 #include <cstring>

 4 using namespace std;

 5 

 6 int hash[9999],sum[110];

 7 char ch1[110],ch2[110];

 8 int num1[110],num2[110];

 9 int n1[110],n2[110],k1,k2;

10 

11 void sushu()

12 {

13     int n,i,k=1;hash[0]=2;

14     for (n=3; n<=9999; n++)

15     {

16 

17         for (i=2; i*i<=n; i++)

18         {

19             if (n%i==0)

20                 break;

21                 else

22                 hash[k++]=n;

23         }

24         if (i*i>n)

25         hash[k++]=n;

26     }

27 }

28 

29 int main ()

30 {

31     sushu();

32     while (cin>>ch1>>ch2)

33     {

34         if (strcmp(ch1,"0")==0&&strcmp(ch2,"0")==0)

35             break;

36         memset(n1,0,sizeof(n1));

37         memset(n2,0,sizeof(n2));

38         memset(num1,0,sizeof(num1));

39         memset(num2,0,sizeof(num2));

40         int len1=strlen(ch1);

41         int len2=strlen(ch2);

42         k1=0;

43         for (int i=0; i<len1; i++)

44         {

45             if (ch1[i]==',')

46             {

47                 k1++;

48                 continue;

49             }

50             num1[k1]=num1[k1]*10+ch1[i]-'0';

51         }

52         k2=0;

53         for (int i=0; i<len2; i++)

54         {

55             if (ch2[i]==',')

56             {

57                 k2++;

58                 continue;

59             }

60             num2[k2]=num2[k2]*10+ch2[i]-'0';

61         }

62         for (int i=k1; i>=0; i--)

63             n1[k1-i]=num1[i];

64         for (int i=k2; i>=0; i--)

65             n2[k2-i]=num2[i];

66 

67         int K=k1>k2?k1:k2;

68         for (int i=0; i<=K; i++)

69         {

70             if (i==0)

71                 sum[i]=n1[i]+n2[i];

72             else

73             {

74                 if (sum[i-1]>=hash[i-1])

75                     sum[i]=n1[i]+n2[i]+1;

76                 else

77                     sum[i]=n1[i]+n2[i];

78             }

79         }

80         if (sum[K]>=hash[K])

81             sum[++K]=1;

82 

83         for (int i=K; i>=0; i--)

84         {

85             if (i==K)

86                 printf ("%d",sum[i]%hash[i]);

87             else

88                 printf (",%d",sum[i]%hash[i]);

89         }

90         printf ("\n");

91     }

92     return 0;

93 }

 

你可能感兴趣的:(HDU)