HDU1230 火星A+B




//HDU1230 火星A+B #include<stdio.h>  //使用輸入輸出函數 #include<string.h>  //使用字符串函數 int prim[50];  //存儲素數列表 int p[250];  //用於篩選素數處理 void makeprime()  //篩選法求素數 {     int i,j;     memset(p,0,sizeof(p));  //初始化數組     for(i=2;i<125;i++)   //篩選法求素數         for(j=i+i;j<250;j+=i)             p[j]=1;     for(i=2,j=0;i<250&&j<50;i++)  //形成素數列表         if(!p[i])             prim[j++]=i; } int main() {     char x[1000],y[1000],*p;  //輸入數組,存儲原始數據、指針     int a[50],b[50],t; //處理數組,中間變量     int len,lena,lenb;//記錄長度     int i,j;  //循環變量      makeprime();//產生素數數組      while(scanf("%s%s",x,y)&&x[0]!='0'||y[0]!='0')  //初始化     {         //初始化處理數組         memset(a,0,sizeof(a));         memset(b,0,sizeof(b));         //處理第一個“火星數”         lena=0;         p=x;         while(strstr(p,","))//提取數字         {             sscanf(p,"%d",&a[lena++]);             p=strstr(p,",")+1;         }         sscanf(p,"%d",&a[lena]);         for(j=0;j<=lena/2;j++)//數字逆序處理[低位放前面,高位放後面,利於進位處理]         {             t=a[j];             a[j]=a[lena-j];             a[lena-j]=t;         }         //同上         lenb=0;         p=y;         while(strstr(p,","))         {             sscanf(p,"%d",&b[lenb++]);             p=strstr(p,",")+1;         }         sscanf(p,"%d",&b[lenb]);         for(j=0;j<=lenb/2;j++)         {             t=b[j];             b[j]=b[lenb-j];             b[lenb-j]=t;         }         //檢測輸出         /*printf("---------a---------\n");         for(i=0;i<=lena;i++)printf("%d ",a[i]);         printf("\n\n");         printf("---------b---------\n");         for(i=0;i<=lenb;i++)printf("%d ",b[i]);         printf("\n\n");*/         //加法處理,進位處理         len=lena>lenb?lena:lenb;//提取最大長度         for(i=0;i<=len;i++)         {             a[i]+=b[i];  //加法處理             if(a[i]>=prim[i])  //進位處理                 a[i+1]+=a[i]/prim[i],a[i]=a[i]%prim[i];         }         if(a[i]>=prim[i])  //假設最高位需要進位             a[i+1]+=a[i]/prim[i],a[i]=a[i]%prim[i];          if(a[i])len++; //若最高位進位,總體長度加一         //輸出答案【中間用逗號隔開,最後要換行】         //printf("ans=");         printf("%d",a[len]);         for(i=len-1;i>=0;i--)printf(",%d",a[i]);         printf("\n");     }     return 0; } 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章