高精度加法(C++实现)
Posted 小张不胖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度加法(C++实现)相关的知识,希望对你有一定的参考价值。
高精度加法
题目描述:
输入:
两个整数 a , b (a,b都不超过1000位)。
输出:
a+b的值。
样例输入:
20100122201001221234567890
2010012220100122
样例输出:
20100122203011233454668012
题目分析:
由于位数较大,所以我们要考虑使用字符数组来接收 a 和 b ,然后在字符数组上进行加法操作。
接下来附上C++代码:
#include <iostream>
#include <string.h>
using namespace std;
void output(char ch1[], char ch2[],int lena,int lenb)//此处是位数多的数字为 ch1
int i, m, delta = lena - lenb;
for (i = lena - 1; i >= 0 && (i-delta)>=0 ; i--)// 将 a 和 b 进行从右向左的相加操作
ch1[i] += ch2[i - delta] - '0';// 减去 '0' 是将 ch2 的值转换为十进制的值(即真值)
m = i;// 为下面的while循环提供数据,且不影响 i 的值
while (ch1[m] > '9' && m >= 0)// 此循环是进行进位操作
ch1[m] -= 10;
m--;// 数组下标向左移动一位
if (m == -1)//如果移动到了最左边,就直接输出 1 ,这个是因为两个相同位数的数相加之后,如果有位数增加,那么最高位为 1
cout << "1";
else
ch1[m] += 1;// 进行进位操作
cout << ch1 << endl;//输出相加后的数组
int main()
char a[1001], b[1001];
int n = 1, lena, lenb, t;
//cin >> n;// 根据个人需要
for (t = 0; t < n; t++)
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
cin >> a >> b;
lena = strlen(a);// 对输入的字符串进行位数的计算
lenb = strlen(b);
if (lena > lenb)// 比较 a 和 b 数组的位数大小,有利于接下来的计算
output(a, b, lena, lenb);
else
output(b, a, lenb, lena);
return 0;
以上是关于高精度加法(C++实现)的主要内容,如果未能解决你的问题,请参考以下文章