1.高精度加高精度(加法)
模拟小学算式
1 4 7
+ 6 5
2 1 2
现在模拟这个算式即可从低位到高位每一位相加
7 + 5 = 12 这一位应该为2, 而进位则为12 / 10 = 1
4 + 6 + 1 = 11 这一位为1,而进位则为11 / 10 = 1;
1 + 0 + 1 = 2 这一位为2
直接给模板代码,给出一定注释,因为时间原因,暂时解析后补。
/*
高精度加法模板,结构体实现
*/
#include <bits/stdc++.h>
using namespace std;
struct bign{
int d[1000];//大整数存放
int len; //大整数的长度
bign() {
memset(d, 0, sizeof(d));
len = 0;
}
};
bign change(char str[]) {
//将整数转换成结构体存储
bign a;
a.len = strlen(str);
for (int i = 0; i < a.len; i++) {
a.d[i] = str[a.len - i - 1] - '0';
}
return a;
}
bign add(bign a, bign b) {
bign c;
int carry = 0; //进位
for (int i = 0; i < a.len || i < b.len; i++) {
//以较长的为界限
int temp = a.d[i] + b.d[i] + carry; //两个对应位与进位相加
c.d[c.len++] = temp % 10; //个位数为该进位的结果
carry = temp / 10; //十位数为新的进位
}
if (carry != 0) {
c.d[c.len++] = carry;
}
return c;
}
void print(bign a) {
for (int i = a.len - 1; i >= 0; i--) {
printf("%d", a.d[i]);