Enclave_ 2022-04-03 13:08 采纳率: 88.5%
浏览 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 09:03
    关注

    0+0
    测试一下

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

报告相同问题?

问题事件

  • 系统已结题 4月14日
  • 已采纳回答 4月6日
  • 修改了问题 4月3日
  • 修改了问题 4月3日
  • 展开全部

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?