C++ 高精度A+B
2024-04-26 18:30:53
发布于:广西
0阅读
0回复
0点赞
/*#include<iostream>
#include <string>
using namespace std;
const int N = 100010;
int arr[N];
int main(){
string a, b;
cin >> a >> b;
int lena = a.size();
int lenb = b.size();
int len = max(lena, lenb);
// 将字符串a转换为数组arr
for (int i = 0; i < lena; ++i) { //123+19->142 123+989-> 1112
arr[i] = a[lena - 1 - i] - '0'; //arr{3,2,1} arr{3,2,1}
//arr{12,3,1} arr{12,10,10} -> arr{2,1,11} ->arr{2,1,1}
//处理进位
//如果最高位大于10 -> 3
}
// 将字符串b加到数组arr上
for (int i = 0; i < lenb; ++i) {
arr[i] += b[lenb - 1 - i] - '0';
}
// 处理进位
for (int i = 0; i < len; ++i) {
if (arr[i] >= 10) {
arr[i] -= 10;
if (i + 1 < len) {
arr[i + 1]++;
} else {
// 如果最高位有进位,处理它
arr[len]++; // 进位到下一个位置
len = min(len + 1, N - 1); // 更新len,确保不越界
}
}
}
// 找到最高位的非零元素位置
int highestNonZero = len - 1;
while (highestNonZero >= 0 && arr[highestNonZero] == 0) {
highestNonZero--;
}
// 输出结果
for (int i = highestNonZero; i >= 0; --i) {
cout << arr[i];
}
cout << endl; // 输出换行符
return 0;
}*/ //这个以前写的
//这个参考别人的
#include<bits/stdc++.h>
using namespace std;
int a[105],b[105],c[105];
string s1,s2;
int l1,l2;
int main(){
cin >> s1 >> s2;
l1 = s1.length();
l2 = s2.length();
for(int i=0;i<l1;i++) a[l1-i] = s1[i] - '0';
for(int i=0;i<l2;i++) b[l2-i] = s2[i] - '0';
int l = max(l1,l2);
for(int i=1;i<=l;i++){
c[i] += a[i] + b[i];
if(c[i]>9){
c[i+1] = 1;
c[i] %= 10;
}
}
if(c[l+1]) l++;
for(int i=l;i>=1;i--) cout << c[i];
return 0;
}//这个比较好
这里空空如也
有帮助,赞一个