C++ return返回错误

lexiMao 2016-06-05 11:41:51
main函数是要求整数N的单峰回文数。
因为结果溢出long int,所以我构造了一个BigInt大整数类,来存放结果。
BigInt类里面重载了+,=,<<.

因为程序的要求是输入为0时结束,所以main函数最后是输入为0时,return 0.
但是这个return就是return不了,其他都没问题。我再return前面加了一个输出Love,也输出了
说明执行到return 0这一步了。但是执行不了。。。。。
执行程序的话,最后是出错,return一个随机数。

求问


#include<iostream>
#include<string>
#include<vector>
#include<sstream>

using namespace std;
//当N=240时,结果比long int最大值大。所以构造了BigInt类
class BigInt{
public:
vector<short int> In;
//构造函数
BigInt(){};
BigInt(vector<short int> s1):In(s1){};
BigInt(int n){vector<short int> tmp(n);In=tmp;};
//析构函数
~BigInt(){};

int length();
BigInt operator+(BigInt s2);
BigInt operator=(BigInt s3);
friend ostream & operator << (ostream & o, BigInt s4);

bool EqualZero(){
if(In.size()==1 && In[0]==0) return 1;
else return 0;
};
};
//string BigInt::str(){return In;}
int BigInt::length(){return In.size();}
//重载+
BigInt BigInt::operator+(BigInt s2){
vector<short int> result;
bool tmp=0;
int length1=length(),length2=s2.length();
for(int i=0;i<min(length1,length2);i++)
{
if(In[length()-i-1]+s2.In[s2.length()-i-1]+tmp>9){//判断是否需要进位
result.push_back(In[length()-i-1]+s2.In[s2.length()-i-1]-10+tmp);
tmp=1;

}
else{
result.push_back(In[length()-i-1]+s2.In[s2.length()-i-1]+tmp);
tmp=0;

}
}
int diff;
if(length()>s2.length()) diff=length()-s2.length();
else diff=s2.length()-length();

if(diff==0 && tmp==1) result.push_back(1);

for(int i=0;i<diff;i++)
{
if(length()-s2.length()>0) {
if(In[length()-s2.length()-1-i]+tmp>9){//判断进位
result.push_back(In[length()-s2.length()-1-i]+tmp-10);
tmp=1;}
else{result.push_back(In[length()-s2.length()-1-i]+tmp);
tmp=0;}
}
else{
if(s2.In[s2.length()-length()-1-i]+tmp>9){
result.push_back(s2.In[s2.length()-length()-1-i]+tmp-10);
tmp=1;}
else{result.push_back(s2.In[s2.length()-length()-1-i]+tmp);
tmp=0;}
}
}
if(diff!=0 && tmp==1) result.push_back(1);

vector<short int> out;
for(int i=0;i<result.size();i++){
out.push_back(result[result.size()-1-i]);
}
BigInt resultF(out);
return resultF;
}
//重载=
BigInt BigInt::operator = (BigInt s3){
In.erase(In.begin(),In.end());
In.assign(s3.In.begin(),s3.In.end());
}
//重载<<
ostream & operator << (ostream & o, BigInt s4){
for(int i=0;i<s4.length();i++){
o << s4.In[i];
}
return o;
}
vector<vector <BigInt> > num(250 ,vector<BigInt>(250));


int main(){
vector<short int> tmp0;
tmp0.push_back(0);
BigInt zero(tmp0);
vector<vector <BigInt> > num(250 ,vector<BigInt>(250));
for(int i=0;i<250;i++){
for(int j=0;j<250;j++){
num[i][j]=zero;
}
}

vector<short int> tmp1;
tmp1.push_back(1);
BigInt one(tmp1);

for(int i=0;i<250;i++){
num[i][i]=one;
num[0][i]=one;
}
for(int i=1;i<250;i++){
for(int j=i-1;j>0;j--){
if(i-2*j>=j || i-2*j==0){
num[i][j]=num[i][j+1]+num[i-2*j][j];
}
else num[i][j]=num[i][j+1];
}
}

int N;
while(1){
cin >> N;
if(N==0) { cout << "Love" << endl;return 0;}
cout << N << " " << num[N][1] << endl;
}

//return 0;
}
...全文
808 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lexiMao 2016-06-08
  • 打赏
  • 举报
回复
引用 4 楼 luciferisnotsatan 的回复:
[quote=引用 3 楼 lexiMao 的回复:] 那可能是编译器不同的问题。我确实是看到return是个随机值
什么编译器,在哪看到main的return值的? vs调试运行,最后你可以看到 The thread 0xd3c has exited with code 0 (0x0). The program '[4876] Test.exe' has exited with code 0 (0x0).[/quote] 谢谢,我用的是codeblock。 当时是有时可以返回0,有时不可以。 把 while(1) 换成 for(int i=1;i>0;) 返回值是正常,觉得很奇怪。 经版主提醒,发现是重载=时忘记写返回值,至于具体为什么忘记写返回值会这样我还不是很懂。 已解决,很感谢
lexiMao 2016-06-08
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
因为你 BigInt BigInt::operator = (BigInt s3) 函数没有返回值
谢谢,真的是这个问题,C++写的还是不熟练。已更正,返回值正常,也已经AC。 当时是有时能返回0,有时不能,还觉得太奇葩了。 非常感谢,以后一定细心耐心写代码,避免这些低级错误,避免麻烦大家
lexiMao 2016-06-06
  • 打赏
  • 举报
回复
那可能是编译器不同的问题。我确实是看到return是个随机值
lm_whales 2016-06-06
  • 打赏
  • 举报
回复
return得了的,这个返回值,要等程序退出,才能看到 main 函数的调用者在库里 DOS下 批处理可以知道返回值 否则,可以写个程序加载这个程序获取返回值。
paschen 版主 2016-06-06
  • 打赏
  • 举报
回复
因为你 BigInt BigInt::operator = (BigInt s3) 函数没有返回值
luciferisnotsatan 2016-06-06
  • 打赏
  • 举报
回复
引用 3 楼 lexiMao 的回复:
那可能是编译器不同的问题。我确实是看到return是个随机值
什么编译器,在哪看到main的return值的? vs调试运行,最后你可以看到 The thread 0xd3c has exited with code 0 (0x0). The program '[4876] Test.exe' has exited with code 0 (0x0).
lexiMao 2016-06-05
  • 打赏
  • 举报
回复
结贴率为0是因为第一次发帖,不是不结贴。。。。

64,645

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧