大数加法(处理不了负数)

大数加法(处理不了负数)

高精度的加法思想

1.把大数存到字符串;
2.字符串的每个字符数字都通过ASCII转换存到数组,注意的是要低位存在数组开头:a[i] = s[len-i-1]-'0';
3.获取最大的数长度:max(len1,len2) ;
4.把a,b值加入到c数组: c[i] = a[i]+b[i];
5.c数组加法进位的算式:
① c[i+1] += c[i]/10;
② c[i] %= 10;
6.数字溢出,长度+1;
7.反向输出结果;

代码实现

#include<iostream>
#include<string>
using namespace std;
string s1, s2;
int a[10000], b[10000], c[100001];
int main() {
	//	1.输入值,长度 
	cin >> s1 >> s2;
	int len1 = s1.size();
	int len2 = s2.size();
	//	2.把字符转为整数存到数组
	//  注意要个位存到数组开头 
	for (int i = 0; i < len1; i++) {
		a[i] = s1[len1 - i - 1] - '0';
	}
	for (int i = 0; i < len2; i++) {
		b[i] = s2[len2 - i - 1] - '0';
	}
	//	3.获取最大的数。 
	int len = max(len1, len2);
	// 对各个位数进行相加 
	for (int i = 0; i < len; i++) {
		c[i] = a[i] + b[i];
	}
	//4.进位
	for (int i = 0; i < len; i++) {
		c[i + 1] += c[i] / 10;
		c[i] %= 10;
	}
	//5.溢出
	while (c[len] == 0 && len > 0) {
		len--;
	}
	if (c[len] > 0) {
		len++;
	}
	//6.反向输出 
	for (int i = len - 1; i >= 0; i--) {
		cout << c[i];
	}
	return 0;
}

posted @ 2024-06-29 23:24  高浩杰  阅读(71)  评论(0)    收藏  举报