#include<iostream>
#include<cstring>
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;
}
如果沒有報錯訊息, 基本上沒人會幫你debug.
如果沒有報錯訊息, 基本上沒人會幫你debug.
如果沒有報錯訊息, 基本上沒人會幫你debug .
送你一篇提問的智慧
建議題主能夠先描述下您這個程式的目的,具體執行時遇到的是什麼樣的錯。例如INT類別應該是內部使用字串表示的BigInterger實現,運行時實際上發現呼叫z.display()沒有任何的輸出(期望應該是印出整數內容)。這樣可以為真正願意幫助你的人節省不少的時間,對自己也是一個運動。
首先你需要修改字串的表達方式,在記憶體中,你應該使用如下的方式來儲存整數,這樣才能比較簡單的做加法對齊:
程式的問題在於重載加法函數的實作。
首先在進行temp變數初始化,沒有正確的設定temp.len的值:
其次你的在各位的操作上也有問題,我不方便一一解釋,這邊貼上我寫的一個樣例實現(注意在該實現中,字符串存儲是逆序的),請注意比較兩者的差異:
當然你的display函數實作也要做對應的修改:
rrreee程式運作結果如下:
rrreee這裡沒有 考慮
p_num == NULL
的情況