高精度加法(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++实现)的主要内容,如果未能解决你的问题,请参考以下文章

(C++)高精度整数的存储读入比较和四则运算

高精度加法(C++实现)

高精度运算 加法减法

(c++描述)算法基础之高精度加法

关于高精度加法的逆序问题(其实是如何储存数)

C++高精度加法