HDU_1230——火星A+B,加法进制问题

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
  1 #include <cstdio>
  2 int prime[30]={0};
  3 void init(void)
  4 {
  5     int i,j,n;
  6     for(i=0,n=2;i<30;i++)
  7         {
  8             for(;;n++)
  9                 {
 10                     for(j=2;j<=n/2;j++)
 11                         {
 12                             if(n%j==0)
 13                                 break;
 14                         }
 15                     if(j>n/2)
 16                         {
 17                             prime[i]=n++;
 18                             break;
 19                         }
 20                 }
 21         }
 22 }
 23 int main()
 24 {
 25     char str[200];
 26     int i,j;
 27     init();
 28     while(gets(str)!=NULL)    //scanf不接受空格 
 29         {
 30             int a[100]={0},b[100]={0},s[100]={0},n=0,la=0,lb=0;
 31             for(i=0;;i++)
 32                 {
 33                     if(str[i]==',')
 34                         {
 35                             a[la++]=n;
 36                             i++;
 37                             n=0;
 38                         }
 39                     else if(str[i]==' ')
 40                         {
 41                             a[la++]=n;
 42                             for(i++,n=0;;i++)
 43                                 {
 44                                     if(str[i]=='\0')
 45                                         {
 46                                             b[lb++]=n;
 47                                             break;
 48                                         }
 49                                     if(str[i]==',')
 50                                         {
 51                                             b[lb++]=n;
 52                                             i++;
 53                                             n=0;
 54                                         }
 55                                     n=n*10+str[i]-'0';
 56                                 }
 57                             break;
 58                         }
 59                     n=n*10+str[i]-'0';
 60                 }
 61                 
 62             for(la--,lb--,i=0;la>=0&&lb>=0;la--,lb--,i++)
 63                 {
 64                     s[i] += a[la]+b[lb];
 65                     if(s[i]>=prime[i])
 66                         {
 67                             s[i+1]=s[i]/prime[i];
 68                             s[i]=s[i]%prime[i];
 69                         }
 70                     if(la==0&&lb!=0)
 71                         {
 72                             for(lb--,i++;lb>=0;lb--,i++)
 73                                 {
 74                                     s[i] += b[lb];
 75                                     if(s[i]>=prime[i])
 76                                         {
 77                                             s[i+1]=s[i]/prime[i];
 78                                             s[i]=s[i]%prime[i];
 79                                         }
 80                                 }
 81                             break;
 82                         }
 83                     else if(lb==0&&la!=0)
 84                         {
 85                             for(la--,i++;la>=0;la--,i++)
 86                                 {
 87                                     s[i] += a[la];
 88                                     if(s[i]>=prime[i])
 89                                         {
 90                                             s[i+1]=s[i]/prime[i];
 91                                             s[i]=s[i]%prime[i];
 92                                         }
 93                                 }
 94                             break;
 95                         }
 96                 }
 97             for(i=99;s[i]==0;i--);
 98             for(;i>=0;i--)
 99                 {
100                     printf(i==0?"%d\n":"%d,",s[i]);
101                 }
102         }
103     return 0;
104 }

 

posted @ 2013-07-15 11:36  瓶哥  Views(284)  Comments(0Edit  收藏  举报