社区讨论

萌新问一个关于class 类的问题

学术版参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo3brk2z
此快照首次捕获于
2023/10/24 04:03
2 年前
此快照最后确认于
2023/10/24 04:03
2 年前
查看原帖
我在尝试用class来实现高精度加法,在没有写析构函数~Number() 时可以输出正确答案,在写了析构函数后就会随机输出,代码以12+1=13作为样例,求大佬的帮助/kk
CPP
#include"iostream"
#include"cstring"
#include"cstdio"
#include"cmath"
using namespace std;

#define ll long long 

char zero[]="00000000000000000000";

class Number
{ 
public:
	int len;
	int *str;
	Number(char *s)
	{
		len=strlen(s);
		str=new int[len];
		for(int i=0;i<len;i++) str[i]=s[len-i-1]-'0';
	}
	friend Number operator +(const Number &n,const Number &m)
	{
		Number t(zero);
		int lenn=max(n.len,m.len);
		for(int i=0;i<lenn;i++)
		{
			if(i<n.len) t.str[i]+=n.str[i];
			if(i<m.len) t.str[i]+=m.str[i];
		}
		t.len=lenn;
		for(int i=0;i<lenn;i++)
		{
			t.str[i+1]+=t.str[i]/10;
			t.str[i]%=10;
		}
		if(t.str[lenn]) t.len++;
		return t;
	}
	friend void print(const Number &number)
	{
		for(int i=0;i<number.len;i++) cout<<number.str[number.len-i-1];
		puts("");	
	}
   //下面这里注释掉就会输出
   //求助怎么样写才能保证可以析构释放空间并且保证正确性
	~Number(){delete[] str,str=NULL;}
};

int main()
{
	Number n1("12"),n2("1");
	Number d("0");
	d=n1+n2;
	print(d);
	return 0;
} 

回复

4 条回复,欢迎继续交流。

正在加载回复...