大数相加
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;}
相关文章推荐
- 【原创】在旧的台式机上安装Ubuntu14.04桌面版、麒麟版和服务器版
- SVM最全面的数学证明
- 牛人啊
- 黑马程序员——Java—GUI编程
- mfc ado 帮助
- C#针对DataTable进行分页方法
- 【原创】在旧的台式机上安装Ubuntu14.04桌面版、麒麟版和服务器版
- URLEncode进行url传递地址的加密与解密
- hdu 1520Anniversary party(简单树形dp)
- Careercup - Google面试题 - 5377673471721472
- 前端工程师的修真秘籍(css、javascript和其它)
- 在C++中实现同步锁
- 黑马程序员——Java集合框架
- 微机接口技术与汇编语言上机实验报告_汇编初步(intel8086)
- char a[]和char*的区别
- 动态ARP表项建立条件
- C#中各类获取设备存储信息的各类方法
- AndroidUI组件之RoomButton
- java 构造函数
- Fix invisible cursor issue in Ubuntu 13.10