1 条题解
-
0
#include #include #include
// 使用标准命名空间 using namespace std;
int main() { // 定义字符数组存储输入的大整数 char a[205], b[205]; // num1, num2: 存储反转后的大整数(便于计算) // num: 存储乘法结果 // ans: 辅助处理进位 int num1[205] = {0}; int num2[205] = {0}; int num[505] = {0}; int ans = 0;
// 输入两个大整数 cin >> a >> b; // 获取字符串长度 int lena = strlen(a); int lenb = strlen(b); // 将字符串 a 转换为数字并反转存储到 num1 for (int i = 0; i < lena; i++) { num1[lena - i] = a[i] - '0'; } // 将字符串 b 转换为数字并反转存储到 num2 for (int i = 0; i < lenb; i++) { num2[lenb - i] = b[i] - '0'; } // 大整数乘法核心:逐位相乘并累加结果 for (int i = 1; i <= lena; i++) { for (int j = 1; j <= lenb; j++) { num[i + j - 1] += num1[i] * num2[j]; } } // 处理进位 int maxlen = lena + lenb - 1; for (int i = 1; i <= maxlen; i++) { ans += num[i]; num[i] = ans % 10; ans /= 10; } // 如果最后还有进位,继续处理 if (ans > 0) { num[++maxlen] = ans; } // 去除结果前面多余的零(最高位的零) while (num[maxlen] == 0 && maxlen > 1) { maxlen--; } // 输出最终结果(从最高位到最低位) for (int i = maxlen; i >= 1; i--) { cout << num[i]; } cout << endl; // 输出换行,使终端输出更整洁 return 0;}
- 1
信息
- ID
- 613
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 12
- 已通过
- 2
- 上传者