#include <bits/stdc++.h>
using namespace std;
//大数减法
bool cmp(vector<int> a, vector<int> b) //比较ab大小,模拟前置负号
{
if (a.size() != b.size()) return a.size() > b.size();
else
{
for (int i = a.size() - 1; i >= 0; i--)
{
if (a[i] != b[i]) return a[i] > b[i];
}
}
return true;
}
//大数减法
vector<int> sub(vector<int> a, vector<int> b)
{
int t = 0;
vector<int> c;
for (int i = 0; i < a.size(); i++)
{
t = a[i] - t;
if (i < b.size()) t -= b[i];
if (t >= 0)
{
c.push_back(t);
t = 0;
}
else
{
c.push_back(t + 10);
t = 1;
}
}
while (c.size() > 1 && c.back() == 0) c.pop_back(); //去掉前导0;例如775-772=003
return c;
}
vector<int> mul_p(vector<int> a, vector<int> b) {
vector<int> c(a.size() + b.size(), 0); // 初始化c为全0
int lc = 0;
for (int i = 0; i < a.size(); i++) {
for (int j = 0; j < b.size(); j++) {
int idx = i + j;
int carry = a[i] * b[j]; // 计算当前位的乘积
while (idx <= lc) {
carry += c[idx]; // 加上当前位置上的值
c[idx] = carry % 10; // 将个位数存入c
carry /= 10; // 计算进位
idx++; // 移动到下一位
}
while (carry > 0) {
if (idx >= c.size()) c.push_back(0); // 如果c的长度不够,则扩展c
c[idx] = carry % 10; // 如果进位不为0,则继续添加到c的下一位
carry /= 10;
idx++;
lc++;
}
}
}
while (c.size() > 1 && c.back() == 0) c.pop_back();
return c;
}
signed main()
{
// 请在此输入您的代码
string a, b;
cin >> a; cin >> b;
vector<int> A, B, C;
if (a[0] == '-') for (int i = a.size() - 1; i > 0; i--) A.push_back(a[i] - '0');
else for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
if (b[0] == '-') for (int i = b.size() - 1; i > 0; i--) B.push_back(b[i] - '0');
else for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');
vector<int> X = mul_p(A, A);
vector<int> Y = mul_p(B, B);
if (cmp(X, Y))
{
C = sub(X, Y);
}
else
{
C = sub(Y, X);
cout << "-";
}
for (int i = C.size() - 1; i >= 0; i--) cout << C[i];
return 0;
}
以上是我的代码,但只通过60%的数据,鄙人百思不得其解,想请教一下大家是哪个地方出了问题