HDU1230

水题~~~

不要去关心题意中为什么10进制38在火星上表示成1110,其实我也不知道,但是这并不影响做题。

例如:4,2,0  1,2,0

个位0+0=0<2 所以就是0

2+2>3 所以为1 且进位1

4+1+1(进位)=6>5 所以就是1

结果 1 1 1 0 

View Code
 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<string.h>
 4 #include<stdlib.h>
 5 #include<algorithm>
 6 using namespace std;
 7 const int maxn = 30;
 8 int prime[ maxn ];
 9 void init_prime( ){
10     prime[ 0 ]=2;
11     prime[ 1 ]=3;
12     int cnt=2;
13     for( int i=5;i<500;i++ ){
14         int f=-1;
15         for( int j=2;j<i;j++ ){
16             if( i%j==0 ){
17                 f=1;
18                 break;
19             }
20         }
21         if( f==-1 )
22         {
23             prime[ cnt++ ]=i;
24             if( cnt==28 )
25                 break;
26         }
27     }
28 }
29 int main(){
30     char aa[ 105 ],bb[ 105 ];
31     init_prime();
32     while( scanf("%s %s",aa,bb)!=EOF ){
33         if( aa[0]=='0'&&bb[0]=='0' )
34             break;
35         int a[ 105 ],b[ 105 ];
36         int lena,lenb;
37         lena=lenb=0;
38         memset( a,0,sizeof( a ));
39         memset( b,0,sizeof( b ));
40         int tmp;
41         for( int i=strlen( aa )-1;i>=0;i-- ){
42             tmp=0;
43             if( aa[i]==',' )
44                 continue;
45             for( int j=i;;j-- ){
46                 if( j<0||aa[j]==',' ){
47                     i=j;
48                     lena++;
49                     break;
50                 }
51                 a[ lena ]+=(( int )( pow(10.0,tmp) )*( aa[j]-'0' ));
52                 tmp++;
53             }
54         }
55         for( int i=strlen( bb )-1;i>=0;i-- ){
56             tmp=0;
57             if( bb[i]==',' )
58                 continue;
59             for( int j=i;;j-- ){
60                 if( j<0||bb[j]==',' ){
61                     i=j;
62                     lenb++;
63                     break;
64                 }
65                 b[ lenb ]+=(( int )( pow(10.0,tmp) )*( bb[j]-'0' ));
66                 tmp++;
67             }
68         }//分别取出 aa,bb中的数字,放在a,b数组中
69         int ans[ 105 ];
70         memset( ans,0,sizeof( ans ));
71         int cnt=0,t=0;
72         int ia,ib;
73         ia=ib=0;
74         while( ia<lena||ib<lenb ){
75             ans[ cnt ]=a[ ia ]+b[ ib ]+t;
76             t=0;
77             if( ans[ cnt ]>=prime[ cnt ] ){
78                 ans[ cnt ]-=prime[ cnt ];
79                 t=1;
80             }
81             cnt++,ia++,ib++;
82         }
83         if( t!=0 )
84             ans[ cnt ]=t;
85         while( ans[cnt]==0 )
86             cnt--;
87         for( int i=cnt;i>=0;i-- )
88             if( i==cnt )
89                 printf("%d",ans[i]);
90             else
91                 printf(",%d",ans[i]);
92         printf("\n");
93     }
94     return 0;
95 }

 

posted @ 2013-02-23 22:51  xxx0624  阅读(369)  评论(0编辑  收藏  举报