C++ return返回错误

C++语言 码拜 9年前 (2016-04-18) 3325次浏览
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;
}
解决方案

10

引用:

那可能是编译器不同的问题。本人确实是看到return是个随机值

什么编译器,在哪看到main的return值的?
vs调试运行,最后你可以看到
The thread 0xd3c has exited with code 0 (0x0).
The program “[4876] Test.exe” has exited with code 0 (0x0).

180

原因是你 BigInt BigInt::operator = (BigInt s3) 函数没有返回值

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ return返回错误
喜欢 (0)
[1034331897@qq.com]
分享 (0)