您的位置:首页 > 其它

大数相加

2014-05-08 22:47 253 查看
大数,是一个long long int都无法表示的数,所以我我们只能用数组做。
首先,输入数组时,我们不能用int型做数组元素,因为无法结束输入,所以只能用char型的,问题又来了,char型的元素运算的是其ASCII码,如何让char型的0-9代表int型的0-9呢?
a_num[i]-='0';OK!解决。
相加运算算法:
定义3个数组,a,b,c,a,b为加数,c为和数。
 循环输入a,b;
 清零c;
先判断a,b的位数大小,令k等于其最大值;
 循环相加
 让c[k]加a,b的最后一位
 判断是否需要进位;
 输出,c[0]是最高位,判断是否为零,决定输出;
代码如下:
#include <iostream>#include <cstdio>#include <string.h>using namespace std;int main(){int a_num[200],b_num[200],c_num[201];int i=0,j=0,k,c;while((a_num[i]=getchar()) !='\n' ){a_num[i]-='0';i++;}while((b_num[j]=getchar())!='\n' ){b_num[j]-='0';j++;}c=(i>j?i:j);i--;j--;//注意,i,j记录的是元素个数,而不是下标,下标从‘0’开始,所以得-1memset(c_num,0,200);for(k=c;k>=0;i--,j--,k--){if(i>=0){c_num[k]+=a_num[i];}if(j>=0){c_num[k]+=b_num[j];}if(c_num[k]>9){c_num[k]-=10;c_num[k-1]++;}}if(c_num[0]!=0)cout<<c_num[0];for(i=1;i<=c;i++){cout<<c_num[i];}return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: