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; }
不要让今天成为明天的遗憾!