2 charles su Charles_Su 于 2016.04.01 00:18 提问

大整数加法,我的代码问题出在哪里,为什么不能运行?

#include
#include
using namespace std;
class INT
{
char *p_num;
int len;
public:
//构造函数
INT()
{
p_num = NULL; len = 0;
}
INT(const char *p)
{
len = strlen(p)+1;
p_num=new char[strlen(p)+1];
strcpy(p_num,p);
}//拷贝函数
INT(const INT &s)
{
len = s.len;
p_num=new char[strlen(s.p_num)+1];
strcpy(p_num,s.p_num);
}

//赋值函数
INT & operator=(const INT &s)
{

    delete[]p_num;
    len = s.len;
    p_num = new char[strlen(s.p_num) + 1];
    strcpy(p_num, s.p_num);
    return *this;
}
//析构函数
~INT()
{
    delete []p_num;
    p_num=NULL;
    len = 0;
}
//下面三个重载函数实现INT型与int型混合运算
friend INT operator+(const INT &x1, const INT &x2);
friend INT operator+(const INT &x, int y);
friend INT operator+(int y, const INT &x);
//显示数据
void display()const
{
    for (int i = 0; i <len; i++)
    cout << p_num[i];
    cout << endl;
}

};
INT operator+(const INT &x1, const INT &x2)
{
INT temp;
temp.p_num = new char[x1.len+x2.len+2];
if (x1.len>=x2.len)
{

    for (int i = temp.len-1; i >= 0; i--) { temp.p_num[i] = '0'; }
    for (int i = x2.len-1; i >= 0; i--)
    {
        temp.p_num[i] = temp.p_num[i] + x1.p_num[i] + x2.p_num[i] - '0';
        if (temp.p_num[i] - '0' > 10)
        {
            temp.p_num[i] -= 10; temp.p_num[i - 1] += 1;
        }
    }
    for (int i = temp.len-x2.len-1; i >= 0; i--)
    {
        temp.p_num[i] +=x1.p_num[i];
    }
}
else
{
    for (int i = temp.len-1; i >= 0; i--) { temp.p_num[i] = '0'; }
    for (int i = x1.len-1; i >= 0; i--)
    {
        temp.p_num[i] = temp.p_num[i] + x1.p_num[i] + x2.p_num[i] - '0';
        if (temp.p_num[i] - '0' > 10)
        {
            temp.p_num[i] -= 10; temp.p_num[i - 1] += 1;
        }
    }

    for (int i = temp.len-1; i >= 0; i--)
    {

        temp.p_num[i] += x2.p_num[i];
    }
   }
return temp;

}
int main()
{
INT x,y,z;
x = "123456789";
y = "12";
z=x+y;
z.display();
system("pause");
return 0;
}

2个回答

caozhy
caozhy   Ds   Rxr 2016.04.01 07:09

错误太多了,比如说,你根本没有代码逻辑在加法中设置len,返回的INT的len是0,导致display根本不会循环。
temp.p_num[i] = temp.p_num[i] + x1.p_num[i] + x2.p_num[i] - '0';
这里每个数字都是ascii形式的,都需要减去'0',另外加法的进位也不对。

参考下这个
http://blog.csdn.net/hanangellove/article/details/42486723

leilba
leilba 赞成!
2 年多之前 回复
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.07.22 20:56

推荐你一本算法书——左飞老师的《算法之美》

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
判断电脑不能上网问题出在哪里
判断电脑不能上网问题出在哪里 判断电脑不能上网问题出在哪里 判断电脑不能上网问题出在哪里判断电脑不能上网问题出在哪里
TCP服务器(socket)
服务器以及客户端程序,不知道为什么连接不上~求助~请大家帮忙看一下问题出在了哪里,谢谢~
FreeRTOS-我的程序不能运行,问题可能出在了哪里?
英文原文:http://www.freertos.org/FAQHelp.html#faq 很遗憾我并不知道你的程序为什么不能运行,但是以下列出了一些不同问题的常用解决方案。 1.程序能够编译,但是不能运行 官方例子中提供的每一个移植好的程序样例在相应的硬件平台上都能正确编译和运行而不用做任何的修改。提供的样例工程将确保新用户尽可能花费最少的时间和精力开始使用FreeRTOS。我们推
基于COCOS2DX的推箱子 源代码
cocos2dx 推箱子 源代码 apk 的运行效果和 exe 有区别 不知道问题出在哪里
大整数加法 C++ 代码
大整数加法 C++ 代码 大整数加法 C++ 代码 大整数加法 C++ 代码
SPIN控件的使用问题
我的程序哪里错了为什么不能调节,,不知道哪里出错了,请大家看看,要写20字真是烦人
ADI放大器设计问答精选
ADI公司放大器的精选问题,很详细哟 1,为什么放大器放大倍数不能到达40倍? 2,放大倍数太低,衰减很厉害,问题出在哪里? ……
文件内容
帮我看看哪里错了,为什么不能连接数据库呢?一运行就出错
请问:问题出在哪里???
<br />#include <stdio.h> <br />#include <stdlib.h> <br />#include <string.h> <br />#include <conio.h> <br />struct record <br />{ <br />char id[10]; <br />char name[20]; <br />char phone[20]; <br />char adress[40]; <br />char postcode[10]; <br />char e_mai
创意作品,BUT问题出在哪里了?????????
#include using namespace std; int main() {     double sum;     cout     cin >>sum ;     if (sum=1)         cout     else         if (sum=2)         cout     else         if (sum=3)