数据太大,爆short了,要用高精度
2026-09-02 20:38:37
发布于:浙江
10阅读
0回复
0点赞
数据太大爆short了要用高精度
代码如下
(用int就行了)
最复杂的代码
#include<bits/stdc++.h>
using namespace std;
struct big{
string num;
string add(string a, string b) {
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int len = max(a.length(), b.length());
string result;
int carry = 0;
for (int i = 0; i < len; ++i) {
int digitA = i < a.length() ? a[i] - '0' : 0;
int digitB = i < b.length() ? b[i] - '0' : 0;
int sum = digitA + digitB + carry;
result.push_back((sum % 10) + '0');
carry = sum / 10;
}
if (carry > 0)result.push_back(carry + '0');
reverse(result.begin(), result.end());
return result;
}
string subtract(string a, string b) {
if (a.length() < b.length() || (a.length() == b.length() && a < b)) {
swap(a, b);
return "-" + subtract(a, b);
}
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
string result;
int borrow = 0;
for (int i = 0; i < a.length(); ++i) {
int digitA = a[i] - '0';
int digitB = i < b.length() ? b[i] - '0' : 0;
int diff = digitA - digitB - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result.push_back(diff + '0');
}
while (result.length() > 1 && result[0] == '0')result.erase(0, 1);
reverse(result.begin(), result.end());
return result;
}
string multiply(string a, string b) {
if (a == "0" || b == "0") return "0";
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int len = a.length() + b.length();
vector<int> result(len, 0);
for (int i = 0; i < a.length(); ++i) {
for (int j = 0; j < b.length(); ++j) {
int digitA = a[i] - '0';
int digitB = b[j] - '0';
result[i + j] += digitA * digitB;
}
}
for (int i = 0; i < len - 1; ++i) {
int carry = result[i] / 10;
result[i + 1] += carry;
result[i] %= 10;
}
string resultStr;
for (int i = len - 1; i >= 0; --i) {
if (resultStr.empty() && result[i] == 0) continue;
resultStr.push_back(result[i] + '0');
}
return resultStr.empty() ? "0" : resultStr;
}
};
int main(){
big a;
cout<<a.multiply("3456","1234");
}
这里空空如也








有帮助,赞一个