程序可以正常运行
输出和答案相同
两者完全一致
左边题目要求 右边我的
可能是存在在一些缺陷 导致某些数据无法全部包含
比如输入样例:
123
234
-
这是答案要求的输出:
不会改了
下面是我的代码
#include <iostream>
using namespace std;
#define N 100
#include <cstring>
int clength(char c[])
{
int i;
for (i = 0; c[i] != '\0'; i++)
{
}
return i;
}
int ilength(int n)
{
int i, num = n;
for (i = 0; num != 0; i++)
{
num /= 10;
}
return i;
}
int tonumber(char a[])
{
int i, num = 0;
for (i = 1; i < clength(a); i++)
{
num = num * 10 + a[i] - '0';
}
if (a[0] == '-')
{
return -num;
}
else
{
return num;
}
}
class BigNum
{
private:
char num[N];
public:
BigNum(char c[] = {"00"});
BigNum(const BigNum &);
~BigNum();
void setNum(char c[]);
char const *getNum(void) const;
void show() const;
BigNum operator+(BigNum &);
BigNum operator-(BigNum &);
};
BigNum::BigNum(char c[])
{
char str[N];
if (c[0] != '-' && c[0] != '0')
{
str[0] = '+';
str[1] = '\0';
strcpy(num, strcat(str, c));
}
else
{
strcpy(num, c);
}
cout << "BigNum Constructor run" << endl;
}
BigNum::BigNum(const BigNum &b)
{
strcpy(num, b.num);
cout << "BigNum CopyConstructor run" << endl;
}
BigNum::~BigNum()
{
cout << "BigNum Destructor run" << endl;
}
void BigNum::setNum(char c[])
{
char str[N];
if (c[0] != '-' && c[0] != '0')
{
str[0] = '+';
str[1] = '\0';
strcpy(num, strcat(str, c));
}
else
{
strcpy(num, c);
}
}
char const *BigNum::getNum(void) const
{
return num;
}
void BigNum::show() const
{
cout << "BigNum(" << num << ")" << endl;
}
BigNum BigNum::operator-(BigNum &b) //重载减法
{
int n, len;
char result[N];
n = tonumber(num) - tonumber(b.num);
len = ilength(n);
if (n > 0)
{
int i;
for (i = len - 1; i >= 0; i--)
{
result[i] = n % 10 + '0';
n /= 10;
}
result[len] = '\0';
}
else if (n < 0)
{
n = -n;
result[0] = '-';
int i;
for (i = len; i >= 1; i--)
{
result[i] = n % 10 + '0';
n /= 10;
}
result[len + 1] = '\0';
}
BigNum tmp1(result);
BigNum tmp2(tmp1);
return tmp2;
}
BigNum BigNum::operator+(BigNum &b)
{
int n, len;
char result[N];
n = tonumber(num) + tonumber(b.num);
len = ilength(n);
if (n > 0)
{
int i;
for (i = len - 1; i >= 0; i--)
{
result[i] = n % 10 + '0';
n /= 10;
}
result[len] = '\0';
}
else if (n < 0)
{
n = -n;
result[0] = '-';
int i;
for (i = len; i >= 1; i--)
{
result[i] = n % 10 + '0';
n /= 10;
}
result[len + 1] = '\0';
}
BigNum tmp1(result);
BigNum tmp2(tmp1);
return tmp2;
}
int main(void)
{
char c[100], op;
cin >> c;
BigNum b1(c), b2(b1);
b1.show();
cin >> c;
b2.setNum(c);
b2.show();
cin >> op;
if (op == '+')
(b1 + b2).show();
if (op == '-')
(b1 - b2).show();
return 0;
}