本文主要是介绍九度oj 题目1016:火星A+B 【ZJU2006考研机试题2】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目1016:火星A+B另一种思路:由于获取到的a[],b[]按下标递增时 从 高位到低位存的,反常,
不妨先把他们翻转成从低位到高位存,这样两个数不对齐时高位可直接视为0,
统一按高位对齐,无需单独分3种情况处理(由于不知哪个数组更长)。
/* 1.全局变量用之前务必初始化2.逻辑要列举清楚,代码多点也别混淆出错
*/
#include<stdio.h>
#include<math.h>
int value[25]={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 a[30],b[30],ans[30],size,size1,size2;
void input() //-------------------------------输入某一行数据
{int tmpN,i;size1=0,size2=0;char tmpC;for(i=0;i<30;i++){ //全局变量初始化a[i]=0;b[i]=0;}while(1){scanf("%d%c",&tmpN,&tmpC);a[size1++]=tmpN;if(tmpC!=',') //当数字后面不是逗号时,说明第一个数输入完毕 OR 数字后面是空格,结束break;}while(1){scanf("%d%c",&tmpN,&tmpC);b[size2++]=tmpN;if(tmpC!=',') //当数字后面不是逗号时,说明第二个数输入完毕 OR 数字后面是回车,结束break;}
/* for(i=0;i<size1;i++)printf("%d ",a[i]);printf("-----------\n");
*/
}void add(int p[],int q[])
{int i,carry=0;size=0;if(size1<size2){int len1=size1;for(i=0;i<len1;i++){ //注意size1与size2不要掉了数字,分别对应p[],q[],别搞混淆。ans[size]=(p[size1-1]+q[size2-1]+carry)%value[i]; carry=(p[size1-1]+q[size2-1]+carry)/value[i];
// printf("%d**%d\n",p[size1-1],q[size2-1]);
// printf("%d\n",carry);size1--; size2--;size++;}
// printf("%d\n",value[2]);
// printf("\n");while(size2!=0){ans[size++]=(q[size2-1]+carry)%value[i];carry=(q[size2-1]+carry)/value[i];size2--;i++;}if(carry!=0) //注意:还有可能向高位进位~~ans[size++]=carry;}else if(size1>size2){int len2=size2;for(i=0;i<len2;i++){ans[size++]=(p[size1-1]+q[size2-1]+carry)%value[i];carry=(p[size1-1]+q[size2-1]+carry)/value[i];size1--; size2--;}while(size1!=0){ans[size++]=(p[size1-1]+carry)%value[i];carry=(p[size1-1]+carry)/value[i];size1--;i++;}if(carry!=0)ans[size++]=carry;}else{int len=size1;for(i=0;i<len;i++){ans[size++]=(p[size1-1]+q[size2-1]+carry)%value[i];carry=(p[size1-1]+q[size2-1]+carry)/value[i];size1--; size2--;}if(carry!=0)ans[size++]=carry;}
}
void show()
{int i;for(i=size-1;i>=0;i--){if(i!=size-1) printf(","); printf("%d",ans[i]);}printf("\n");
}
int main()
{//freopen("G:\\in.txt","r",stdin);while(1){input();if(size1==1&&a[0]==0||size2==1&&b[0]==0)break;add(a,b);show();}return 0;
}
这篇关于九度oj 题目1016:火星A+B 【ZJU2006考研机试题2】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!