#include
#include
using namespace std;
char a[100], b[100];
int A[100], B[100];
int c[101];
int main() {
cin >> a >> b;
int lena = strlen(a);
int lenb = strlen(b);
int len = max(lena, lenb);
int l = len - 1;
if (a[0] == 0 || b[0] == 0) {
cout << 0;
}
else {
for (int i = 0; i < len; i++) {
A[i] = a[len - 1 - i] - 48;
}
for (int i = 0; i < len; i++) {
B[i] = b[len - 1 - i] - 48;
}
for (int lenc = 0; lenc < len; lenc++) {
c[lenc] = A[lenc] + B[lenc];
}
if (c[l] >= 10) {
len++;
}
for (int lenc = 0; lenc < len; lenc++) {
c[lenc + 1] += c[lenc] / 10;
c[lenc] %= 10;
}
for (int i = len - 1; i >= 0; i--) {
cout << c[i];
}
}
}

关于#高精度#的问题,如何解决?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 下坠丷 2022-06-23 06:17关注
#include<iostream> #include<cstring> using namespace std; char a[100], b[100]; int A[100], B[100]; int c[101]; int main() { cin >> a >> b; int lena = strlen(a); int lenb = strlen(b); int len = max(lena, lenb); int l = len - 1; if (a[0] == 0 || b[0] == 0) { cout << 0; } else { //这里的问题,没有把位对齐,最终结果导致长的字符串的最高位和短的字符串中的最高位相减 //并且char类型数组中未赋值为int类型的0而不是char的'0',-48之后是-48而非期望的0 /*for (int i = 0; i < len; i++) { A[i] = a[len - 1 - i] - 48; } for (int i = 0; i < len; i++) { B[i] = b[len - 1 - i] - 48; }*/ //正确处理,根据每个字符串的长度,从低位开始放到数字数组里面 for (int i = 0; i < lena; i++) { A[i] = a[lena - 1 - i] - 48; } for (int i = 0; i < lenb; i++) { B[i] = b[lenb - 1 - i] - 48; } for (int lenc = 0; lenc < len; lenc++) { c[lenc] = A[lenc] + B[lenc]; } if (c[l] >= 10) { len++; } for (int lenc = 0; lenc < len; lenc++) { c[lenc + 1] += c[lenc] / 10; c[lenc] %= 10; } for (int i = len - 1; i >= 0; i--) { cout << c[i]; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录