程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1230(火星A+B,進制)

hdu 1230(火星A+B,進制)

編輯:C++入門知識

 


/*

 

 

 

個人感覺如果進制轉換的話太麻煩,直接模擬加法,不同位數采用不同的進制加法。。。

/但是還是WA了兩次,沒有處理好余數的問題,當不能進位時。

 


2013-04-23


*/

 

 

[cpp]
#include"stdio.h"  
#include"string.h"  
#include"math.h"  
int prime[25],cnt; 
void fun() 

    int i,j,k,f; 
    cnt=2; 
    prime[0]=2; 
    prime[1]=3; 
    for(i=4;i<=1000;i++) 
    { 
        f=1; 
        k=(int)sqrt(i); 
        for(j=2;j<=k;j++) 
        { 
            if(i%j==0) 
            { 
                f=0;break; 
            } 
        } 
        if(f)prime[cnt++]=i; 
        if(cnt==25)break; 
    } 

         
int main() 

    int l1,l2; 
    int i,j,k; 
    int t1,t2,t; 
    int a[26],b[26],c[26]; 
    char s1[101],s2[101]; 
    fun(); 
    while(scanf("%s %s",s1,s2)==2) 
    { 
        if(strcmp(s1,"0")==0||strcmp(s2,"0")==0)break; 
         
        l1=strlen(s1); 
        l2=strlen(s2); 
 
        //為後面處理最後一位的數做准備  
        s1[l1]=',',s1[++l1]=0; 
        s2[l2]=',',s2[++l2]=0; 
 
 
        memset(a,0,sizeof(a)); 
        memset(b,0,sizeof(b)); 
 
 
        //A  
        t1=0; 
        t=0; 
        for(i=0;s1[i];i++) 
        { 
            if(s1[i]==',') 
            { 
                a[t1++]=t; 
                t=0; 
            } 
            else if(s1[i]>='0'&&s1[i]<='9') 
            { 
                t=t*10+s1[i]-'0'; 
            } 
        } 
        //需要逆置一下。。  
        for(i=0,j=t1-1;i<j;i++,j--) 
        { 
            t=a[i]; 
            a[i]=a[j]; 
            a[j]=t; 
        } 
 
 
        //B  
        t2=0; 
        t=0; 
        for(i=0;s2[i];i++) 
        { 
            if(s2[i]==',') 
            { 
                b[t2++]=t; 
                t=0; 
            } 
            else if(s2[i]>='0'&&s2[i]<='9') 
            { 
                t=t*10+s2[i]-'0'; 
            } 
        } 
        for(i=0,j=t2-1;i<j;i++,j--) 
        { 
            t=b[i]; 
            b[i]=b[j]; 
            b[j]=t; 
        } 
         
 
        memset(c,0,sizeof(c)); 
        i=0; 
        int carry; 
        carry=0; 
        while(i<t1||i<t2) 
        { 
            t=a[i]+b[i]; 
            t+=carry; 
            if(t>=prime[i]) 
            { 
             
                c[i]=t%prime[i]; 
                carry=t/prime[i]; 
            } 
            else 
            { 
                c[i]=t; 
                carry=0;//剛開始沒有寫,WA了一次  
            } 
            i++; 
        } 
        if(carry!=0)//  
            c[i++]=carry; 
        for(j=i-1;j>0;j--) 
            printf("%d,",c[j]); 
        printf("%d\n",c[0]); 
    } 
    return 0; 

#include"stdio.h"
#include"string.h"
#include"math.h"
int prime[25],cnt;
void fun()
{
 int i,j,k,f;
 cnt=2;
 prime[0]=2;
 prime[1]=3;
 for(i=4;i<=1000;i++)
 {
  f=1;
  k=(int)sqrt(i);
  for(j=2;j<=k;j++)
  {
   if(i%j==0)
   {
    f=0;break;
   }
  }
  if(f)prime[cnt++]=i;
  if(cnt==25)break;
 }
}
  
int main()
{
 int l1,l2;
 int i,j,k;
 int t1,t2,t;
 int a[26],b[26],c[26];
 char s1[101],s2[101];
 fun();
 while(scanf("%s %s",s1,s2)==2)
 {
  if(strcmp(s1,"0")==0||strcmp(s2,"0")==0)break;
  
  l1=strlen(s1);
  l2=strlen(s2);

  //為後面處理最後一位的數做准備
  s1[l1]=',',s1[++l1]=0;
  s2[l2]=',',s2[++l2]=0;


  memset(a,0,sizeof(a));
  memset(b,0,sizeof(b));


  //A
  t1=0;
  t=0;
  for(i=0;s1[i];i++)
  {
   if(s1[i]==',')
   {
    a[t1++]=t;
    t=0;
   }
   else if(s1[i]>='0'&&s1[i]<='9')
   {
    t=t*10+s1[i]-'0';
   }
  }
  //需要逆置一下。。
  for(i=0,j=t1-1;i<j;i++,j--)
  {
   t=a[i];
   a[i]=a[j];
   a[j]=t;
  }


  //B
  t2=0;
  t=0;
  for(i=0;s2[i];i++)
  {
   if(s2[i]==',')
   {
    b[t2++]=t;
    t=0;
   }
   else if(s2[i]>='0'&&s2[i]<='9')
   {
    t=t*10+s2[i]-'0';
   }
  }
  for(i=0,j=t2-1;i<j;i++,j--)
  {
   t=b[i];
   b[i]=b[j];
   b[j]=t;
  }
  

  memset(c,0,sizeof(c));
  i=0;
  int carry;
  carry=0;
  while(i<t1||i<t2)
  {
   t=a[i]+b[i];
   t+=carry;
   if(t>=prime[i])
   {
   
    c[i]=t%prime[i];
    carry=t/prime[i];
   }
   else
   {
    c[i]=t;
    carry=0;//剛開始沒有寫,WA了一次
   }
   i++;
  }
  if(carry!=0)//
   c[i++]=carry;
  for(j=i-1;j>0;j--)
   printf("%d,",c[j]);
  printf("%d\n",c[0]);
 }
 return 0;
}

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved