hdu1230火星A+B (大數題)

來源:互聯網
上載者:User

標籤:des   style   blog   color   os   io   for   ar   div   

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 Input1,0 2,14,2,0 1,2,01 10,6,4,2,10 0 

 

Sample Output1,0,11,1,1,01,0,0,0,0,0  用大數的方法做 一位一位分開求 最後倒敘輸出
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int hash[9999];int sir[500];char ch1[1000],ch2[1000];int num1[100],num2[100],n1[100],n2[100],sum[100];int main(){    int k=1;    for(int i=2;i<=9999;i++)    {        if(!hash[i])        {            sir[k++]=i;            for(int j=i+i;j<=9999;j+=i)            hash[j]=1;        }    }    while(scanf("%s%s",ch1,ch2)!=EOF)    {        if(strcmp(ch1,"0")==0&&strcmp(ch2,"0")==0)        break;        int k1=1,k2=1;        num1[1]=num2[1]=0;        for(int i=0;i<strlen(ch1);i++)        {            if(ch1[i]==‘,‘)            {                k1++;                num1[k1]=0;                continue;            }            num1[k1]=num1[k1]*10+ch1[i]-‘0‘;            //cout<<num1[k1];        }        //cout<<endl;        for(int i=0;i<strlen(ch2);i++)        {            if(ch2[i]==‘,‘)            {                k2++;                num2[k2]=0;                continue;            }            num2[k2]=num2[k2]*10+ch2[i]-‘0‘;            //cout<<num2[k2];        }        //cout<<endl;        memset(n1,0,sizeof(n1));        memset(n2,0,sizeof(n2));        for(int i=k1;i>0;i--)        n1[k1-i+1]=num1[i];        for(int i=k2;i>0;i--)        n2[k2-i+1]=num2[i];        //for(int i=1;i<=k1;i++)        //printf("%d,",n1[i]);        int K=k1>k2?k1:k2;        for(int i=1;i<=K;i++)        {            if(i==1)            sum[i]=n1[i]+n2[i];            else            {                if(sum[i-1]>=sir[i-1])                sum[i]=n1[i]+n2[i]+1;                else                sum[i]=n1[i]+n2[i];            }            //cout<<sum[i]<<endl;        }        if(sum[K]>=sir[K])        sum[++K]=1;        for(int i=K;i>0;i--)        {            if(i==K)            {                printf("%d",sum[i]%sir[i]);            }            else            printf(",%d",sum[i]%sir[i]);        }        printf("\n");    }    return 0;}

 

hdu1230火星A+B (大數題)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.