水题~~~
不要去关心题意中为什么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 }