大数加法
来源:互联网 发布:json数组格式 编辑:程序博客网 时间:2024/06/06 14:08
在处理某些问题的时候又是会遇到及其庞大的数字,数字型的变量可能不能完全容纳,那么此时我们可以用字符串来实现庞大数字的运算。
将字符串存入数组中,a[0](a[1]也可以)是最低位,从最低位开始加,将每位相加的结果存入另一个数组中,要考虑的是进位的问题,可以依次处理每一位向前进位,最后再输出即可。
以下代码为边加边进位的方式,也可以选择先加完,最后进位。
#include<stdio.h>#include<string.h>#include<string>#include<iostream>#define MAXN 50001using namespace std;int main(){ void init (int x[], string chr, int len); int add (int x[], int y[], int z[], int len); void output (int z[], int len); string str1, str2; int a[MAXN]={0}, b[MAXN]={0}, z[MAXN]={0}; int l1, l2, len ,i; cin>>str1>>str2; l1 = str1.size(); l2 = str2.size(); init (a, str1, l1); init (b, str2, l2); if (l1 >= l2) { len = add (a, b, z, l1); } else { len = add (a, b, z, l2); } output (z, len); return 0;}void init (int x[], string str, int len) //字符串转换成数组{ int i; for (i = 0; i <= len -1; i++) //输入字符串从个位传入到数组中 { x[len-1-i] = str[i] - '0'; }}int add (int x[], int y[], int z[], int len){ int i, j, r; for (j = 0; j < len; j++) //每一位相加 { z[j] += x[j] + y[j]; //当前位相加 for (i = j; i < len; i++) //判断是否需要进位 { if (z[i] >= 10) //当前位大于10需要进位 { z[i+1] += z[i]/10; //下一位获得进位的数 z[i] %= 10; //当前位归为10以内的数 if (z[len] > 0) //若最高位增加则长度增大 len++; if (z[i+1] < 10) //若下一位小于10不需要进位则退出当前循环 break; } } } return len;}void output (int z[], int len){ int i; for (i = len-1; i >= 0; i--) { printf ("%d", z[i]); } printf ("\n");}
阅读全文
0 0
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- 大数加法
- linux常用命令
- VS2017安装ImageWatch
- Memcached入门学习四(spring 集成MemCached)
- Android判断手机是否安装微信(总结)
- 真正从零开始,TensorFlow详细安装入门图文教程!
- 大数加法
- 模拟电路学习总结
- 【总结】Unity:代码动态加载Prefab预设体
- Linux tomcat关闭 出现 java.net.ConnectException: Connection refused
- MFC更改环境目录可执行文件目录下继承的值
- 使用teragen产生数据
- 【Axure 实战】基础操作记录+oa系统表单表格类原型
- fake-useragent,python爬虫伪装请求头
- Spring Boot学习(四)之web开发渲染页面 -- Thymeleaf