码迷,mamicode.com
首页 > 其他好文 > 详细

火星A+B

时间:2015-05-04 22:00:46      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

 C. 火星A+B

Time Limit: 1000ms
Memory Limit: 32768KB
64-bit integer IO format: %I64d      Java class name: Main
读入两个不超过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 Input

1,0 2,1
4,2,0 1,2,0
1 10,6,4,2,1
0 0

Sample Output

1,0,1
1,1,1,0
1,0,0,0,0,0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char x[10000],y[10000];
int prime(int a[],int n)/*n素数范围*/
{
    int i,j,k,x,num,b[(n+1)*2];
    n++;
    n/=2;
    a[0]=2;
    a[1]=3;
    num=2;
    for(i=1; i<=2*n; i++)
        b[i]=0;
    for(i=3; i<=n; i+=3)
        for(j=0; j<2; j++)
        {
            x=2*(i+j)-1;
            while(b[x]==0)
            {
                a[num++]=x;
                for(k=x; k<=2*n; k+=x)
                    b[k]=1;
            }
        }
    return num;/*素数个数*/
}
int main()
{
    int a[10000],l,l1,l2,sum1[10000],sum2[10000],sum3[10000],x1,y1,p,i,f,j,jw,jh;
    l=prime(a,100000);
    while(1)
    {
        scanf(" %s %s",x,y);
        l1=strlen(x);
        l2=strlen(y);
        if(l1==l2&&l1==1&&x[0]==0&&y[0]==0)
            break;
        x[l1]=,;
        y[l2]=,;
        x1=0;
        p=0;
        for(i=0; i<=l1; i++)
        {
            if(x[i]==,)
            {
                sum1[x1++]=p;
                p=0;
            }
            else
                p=p*10+(x[i]-0);
        }
        y1=0;
        p=0;
        for(i=0; i<=l2; i++)
        {
            if(y[i]==,)
            {
                sum2[y1++]=p;
                p=0;
            }
            else
                p=p*10+(y[i]-0);
        }
        for(i=0; i<=(x1-1)/2; i++)
        {
            jh=sum1[i];
            sum1[i]=sum1[x1-1-i];
            sum1[x1-1-i]=jh;
        }
        for(i=0; i<=(y1-1)/2; i++)
        {
            jh=sum2[i];
            sum2[i]=sum2[y1-1-i];
            sum2[y1-1-i]=jh;
        }
        /*for(i=0; i<x1; i++)
            printf("!%d ",sum1[i]);
        printf("\n");
        for(i=0; i<y1; i++)
            printf("@%d ",sum2[i]);
        printf("\n");*/
        f=0;
        jw=0;
        for(i=0;i<x1&&i<y1;i++)

        {
            if(sum1[i]+sum2[i]+jw>=a[f])
            {
                sum3[f]=sum1[i]+sum2[i]+jw-a[f];
                jw=1;
                f++;
            }
            else
            {
                sum3[f]=sum1[i]+sum2[i]+jw;
                f++;
                jw=0;
            }
        }
        if(i!=x1)
        {
            for(; i<=x1; i++)
            {
                  if(i==x1)
                {
                    if(jw==1)
                    {
                       sum3[f++]=1;
                    }
                    break;
                }
                if(sum1[i]+jw>=a[f])
                {
                    sum3[f]=sum1[i]+jw-a[f];
                    jw=1;
                    f++;
                }
                else
                {
                    sum3[f]=sum1[i]+jw;
                    f++;
                    jw=0;
                }
            }
        }
        else if(i!=y1)
        {
            for(; i<=y1; i++)
            {
                if(i==y1)
                {
                    if(jw==1)
                    {
                       sum3[f++]=1;
                    }
                    break;
                }
                if(sum2[i]+jw>=a[f])
                {
                    sum3[f]=sum2[i]+jw-a[f];
                    jw=1;
                    f++;
                }
                else
                {
                    sum3[f]=sum2[i]+jw;
                    f++;
                    jw=0;
                }
            }
        }
        else if(jw==1)
        {
            sum3[f++]=1;
        }
        for(i=f-1;i>0; i--)
            printf("%d,",sum3[i]);
        printf("%d\n",sum3[0]);
    }
    return 0;
}

 

火星A+B

标签:

原文地址:http://www.cnblogs.com/Qiao994255978/p/4477259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!