简单高精度加法
来源:互联网 发布:sql server2012破解版 编辑:程序博客网 时间:2024/05/17 03:39
高精度加法这里用的是字符串(数组)模拟进行的,将字符串存入数组中,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
- 【高精度】简单高精度加法,石油大学
- 简单高精度加法
- 简单高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度 加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- Volley的使用
- 文章标题 HDU 1754 : I Hate It (分块 、线段树)
- 使用配置文件注入URL
- 1073. 多选题常见计分法(20)
- 一个JAVA程序员成长之路分享
- 简单高精度加法
- conda 镜像管理
- 20171025之前的记录
- MVP+OKHttp获取网络数据
- 学习总结-javascript数据类型详解
- 前端性能优化
- 使用murano的PL语言
- Pycharm can't use Subversion command line client问题解决
- 5.12选择控制结构,习题5