Code:
#include <bits/stdc++.h>
#include <vector>
using namespace std;
string number1, number2;
int jinweide1;
namespace sub {
bool cmp (vector<int> &A, vector<int> &B) {
if (A.size() != B.size()) return A.size() > B.size();
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) {
vector<int> C;
int t = 0;
for (int i = 0; i < A.size(); ++i) {
t = A[i] - t;
if (i < B.size()) t -= B[i];
C.push_back((t + 10) % 10);
if (t < 0) t = 1;
else t = 0;
}
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
string ansans = "";
vector<int> A, B;
for(int i = number1.size() - 1; i >= 0; --i) {
A.push_back(a[i] - '0');
}
for(int i = number2.size() - 1; i >= 0; --i) {
B.push_back(b[i] - '0');
}
vector<int> C;
if (cmp(A, B)) C = sub(A, B);
else C = sub(B, A), cout << "-";
for (int i = C.size() - 1; i >= 0; --i) {
ansans += c[i];
}
}
namespace add {
string add(string s1, string s2) {
string s;
int len1 = s1.length();
int len2 = s2.length();
if (len1 < len2) {
for (int i = 1; i <= len2 - len1; ++i) {
s1 = "0" + s1;
}
} else {
for (int i = 1; i <= len1 - len2; ++i) {
s2 = "0" + s2;
}
}
len1 = s1.length();
int cf = 0;
int temp;
for (int i = len1 - 1; i >= 0; --i) {
temp = s1[i] - '0' + s2[i] - '0' + cf;
cf = temp / 10;
temp %= 10;
s = char(temp + '0') + s;
}
if (cf != 0) s = char(cf + '0') + s;
return s;
}
string add2(string s1, string s2) {
string s;
int len1 = s1.length();
int len2 = s2.length();
if (len1 < len2) {
for (int i = len2 - len1; i >= 1; --i) {
s1 += "0";
}
} else {
for (int i = len1 - len2; i >= 1; --i) {
s2 += "0";
}
}
len1 = s1.length();
int cf = 0;
int temp;
for (int i = len1; i >= 0; --i) {
temp = s1[i] - '0' + s2[i] - '0' + cf;
cf = temp / 10;
temp %= 10;
s = char(temp + '0') + s;
}
if (cf != 0) s = char(cf + '0') + s;
t = s[1];
s.erase(0, 1);
return s;
}
}
using namespace add1;
using namespace sub1;
namespace solve {
int t = 0;
bool check(string s) {
for (int i = 0; i < s.size(); ++i) {
if (s[i] == '.') return true;
else t++;
}
return false;
}
string solve(string s1, string s2) {
if (s1[i] == '+') s1.erase(0, 1);
bool b = check(s1);
bool b2 = check(s2);
// b 判断是否为小数
string ans1 = "", ans2 = "";
if (b) {
for (int i = t + 1; i < s.size(); ++i) {
ans1 = s1[i] + ans1;
}
}
if (b2) {
t = check(s2);
for (int i = t + 1; i < s.size(); ++i) {
ans2 = s2[i] + ans2;
}
}
string cnt1 = "", cnt2 = "";
if (ans2[1] == '-') {
cnt1 = sub(s1, s2);
} else {
cnt1 = add(s1, s2);
}
cnt2 = cnt2 + to_string(t);
cnt2 = cnt2 + add2(ans1, ans2);
string answer = "";
answer = answer + cnt1;
answer = answer + ".";
answer = answer + cnt2;
return answer;
}
}
using namespace solve;
int main() {
cin >> s1 >> s2;
cout << solve(s1, s2);
}
在线等,挺急的,回复请@