czm2526366 @ 2022-02-26 23:35:03
using namespace std;
#include<iostream>
#include<algorithm>
#include<math.h>
#include<iomanip>
#include<string>
int* stoa(string a)
{
int* A = new int[a.size()];
for (int i = 0; i < a.size(); i++) {
A[i] = a[a.size() - 1 - i] - '0';
}
return A;
}
int main()
{
string a1, b1;
cin >> a1>> b1;
int* a = stoa(a1);
int* b = stoa(b1);
int* ans = new int[a1.size() + b1.size()]{ 0 };
for (int i = 0; i < b1.size(); i++) {
for (int j = 0; j < a1.size(); j++) {
ans[i + j] += (b[i] * a[j]);
}
for (int i = 0; i < a1.size() + b1.size(); i++) {
if (ans[i] >= 10) {
ans[i + 1] += ans[i] / 10;
ans[i] %= 10;
}
}
}
int i = a1.size() + b1.size() - 1;
while (ans[i] == 0)
i--;
if (i == -1) {
cout << 0;
return 0;
}
for (; i >= 0; i--) {
cout << ans[i];
}
}
by Arefa @ 2022-02-26 23:48:24
洛谷IDE结果:空
while (ans[i] == 0)
i--;
这段本身就有问题,当ans全是空时,ans[-1]是什么?下表越界?
而IDE上输出可发现i最小还到了-2才停止......
这说明你访问了一些不知道属于谁的内存空间......
i到了-2,自然不会 ==-1 也就不会输出0了。 如果在自己的编辑环境输出了0,那是运气好......
这段可以改为:
while(i>0 && ans[i]==0)
i--;
至于是否还有其他问题,未进行深究。