ACM1230_火星A+B(进位的运算)


//只要看懂火星A+B的进位关系就好了

#include<stdio.h>
int p[26]={1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
int main()
{
    int a[26],b[26],sum[26];
    int m,n,i,j,k,add,x,y,max;
    char c;
    while(1)
    {
        for(i=0;i<=25;i++)//此处用于初始化 
        {
            a[i]=0;b[i]=0;sum[i]=0;
        }
        for(i=1;i<=25;i++)//对a的输入进行处理 
        {
            scanf("%d%c",&a[i],&c);//将‘,’给过滤掉 
            if(c==' ')break;
        }
        m=i;//对a的长度进行存储 
        for(i=1;i<=25;i++)//对b的输入进行处理 
        {
            scanf("%d%c",&b[i],&c);////将‘,’给过滤掉 
            if(c=='\n')break;
        }
        n=i;//对b的长度进行存储 
        if(a[1]==0&&b[1]==0)break;//判断是否结束这个程序 
        k=m>n?m:n;//比较a,b升序的大小 
        for(i=1,add=0,max=k;i<=max;i++)//add 当作进位 值 
        {
            if(m>=1)x=a[m--];//从低位进行操作 ,并取出值 
            else x=0;
            if(n>=1)y=b[n--];//从低位进行操作 并取出值 
            else y=0;
            sum[k--]=(x+y+add)%p[i];//进行火星A+B的操作 
            add=(x+y+add)/p[i];//计算下一个进位的值 
        }
        sum[0]=add;
        if(sum[0]!=0)printf("%d,",sum[0]);
        for(i=1;i<max;i++)
            printf("%d,",sum[i]);
        printf("%d\n",sum[max]);
    }
    return 0;
}

 

posted @ 2013-07-12 13:00  Talbot3  阅读(351)  评论(0编辑  收藏  举报