#include<iostream>
#include<cstring>
#define size 200
using namespace std;
class Number {
public:
Number();
Number(string num);
void Get_num();
void Set_symbol(bool f);
friend Number operator +(Number &a, Number &b) {
int len;
Number c;
(a.s_len > b.s_len) ? (len = a.s_len) : (len = b.s_len);
for(int i = 0; i <= len-1 ;i++) {
c.s_num[i] = a.s_num[i] + b.s_num[i];
if(c.s_num[i] >= 10) {
c.s_num[i] %= 10;
c.s_num[i+1]++;
}
}
if(c.s_num[len] > 0)
len++;
c.s_len = len;
return c;
}
friend Number operator -(Number &a, Number &b) {
int len = a.s_len;
Number c;
for(int i = 0; i <= len-1; i++) {
c.s_num[i] += a.s_num[i] - b.s_num[i];
if(c.s_num[i] < 0) {
c.s_num[i] += 10;
c.s_num[i+1]--;
}
}
while(c.s_num[len-1] == 0 && len > 1)
len--;
c.s_len = len;
return c;
}
private:
int s_num[size];
int s_len;
bool symbol;
};
Number::Number() {
memset(s_num, 0, sizeof(s_num));
}
Number::Number(string num) {
if(num[0] != '-') {
symbol = true;
s_len = num.length();
memset(s_num, 0, sizeof(s_num));
for(int i = 0; i <= s_len-1; i++) {
s_num[i] = int(num[s_len - 1 - i]) - int('0');
}
}
else {
symbol = false;
s_len = num.length() - 1;
memset(s_num, 0, sizeof(s_num));
for(int i = 0; i <= s_len-1; i++) {
s_num[i] = int(num[s_len - i]) - int('0');
}
}
}
void Number::Get_num() {
if(symbol) {
for(int i = s_len-1; i >= 0; i--)
cout << s_num[i];
}
else {
cout << '-';
for(int i = s_len-1; i >= 0; i--)
cout << s_num[i];
}
}
void Number::Set_symbol(bool f) {
symbol = f;
}
int main() {
string s1, s2;
int pm;
cout << "Input your numbers : " << endl;
cin >> s1 >> s2;
cout << "Plus(1) or Minus(0) : " << endl;
cin >> pm;
Number a(s1), b(s2), c;
if(pm) {
if(s1[0] == '-' && s2[0] == '-') {
c = a + b;
c.Set_symbol(false);
c.Get_num();
}
else if(s1[0] != '-' && s2[0] == '-') {
s2 = s2.substr(1, s2.length()-1);
if(s1.length() > s2.length()) {
c = a - b;
c.Set_symbol(true);
c.Get_num();
}
else if(s1.length() < s2.length()) {
c = b - a;
c.Set_symbol(false);
c.Get_num();
}
else {
if(s1 >= s2) {
c = a - b;
c.Set_symbol(true);
c.Get_num();
}
else {
c = b - a;
c.Set_symbol(false);
c.Get_num();
}
}
}
else if(s2[0] != '-' && s1[0] == '-') {
s1 = s1.substr(1, s1.length()-1);
if(s2.length() > s1.length()) {
c = b - a;
c.Set_symbol(true);
c.Get_num();
}
else if(s2.length() < s1.length()) {
c = a - b;
c.Set_symbol(false);
c.Get_num();
}
else {
if(s2 >= s1) {
c = b - a;
c.Set_symbol(true);
c.Get_num();
}
else {
c = a - b;
c.Set_symbol(false);
c.Get_num();
}
}
}
else {
c = a + b;
c.Set_symbol(true);
c.Get_num();
}
}
else {
if(s1[0] != '-' && s2[0] == '-') {
c = a + b;
c.Set_symbol(true);
c.Get_num();
}
else if(s2[0] != '-' && s1[0] == '-') {
c = a + b;
c.Set_symbol(false);
c.Get_num();
}
else if(s1[0] == '-' && s2[0] == '-') {
s1 = s1.substr(1, s1.length()-1);
if(s2.length() > s1.length()) {
c = b - a;
c.Set_symbol(true);
c.Get_num();
}
else if(s2.length() < s1.length()) {
c = a - b;
c.Set_symbol(false);
c.Get_num();
}
else {
if(s2 >= s1) {
c = b - a;
c.Set_symbol(true);
c.Get_num();
}
else {
c = a - b;
c.Set_symbol(false);
c.Get_num();
}
}
}
else {
if(s2.length() > s1.length()) {
c = b - a;
c.Set_symbol(false);
c.Get_num();
}
else if(s2.length() < s1.length()) {
c = a - b;
c.Set_symbol(true);
c.Get_num();
}
else {
if(s2 >= s1) {
c = b - a;
c.Set_symbol(false);
c.Get_num();
}
else {
c = a - b;
c.Set_symbol(true);
c.Get_num();
}
}
}
}
return 0;
}
【高精度加减-数字类】
最新推荐文章于 2021-01-30 06:14:45 发布