Enclave_ 2022-04-03 05:08 采纳率: 85.2%
浏览 61
已结题

大数类输出的问题 结果正确 但提交错误 是不是没有包含某些数据

程序可以正常运行
输出和答案相同
两者完全一致
左边题目要求 右边我的

img

可能是存在在一些缺陷 导致某些数据无法全部包含
比如输入样例:
123
234
-

这是答案要求的输出:

img

不会改了
下面是我的代码



#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;
}

展开全部

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-04-06 01:03
    关注

    0+0
    测试一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月6日
  • 修改了问题 4月3日
  • 修改了问题 4月3日
  • 展开全部
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部