main函数是要求整数N的单峰回文数。
原因是结果溢出long int,所以本人构造了一个BigInt大整数类,来存放结果。
BigInt类里面重载了+,=,<<.
原因是程序的要求是输入为0时结束,所以main函数最后是输入为0时,return 0.
但是这个return就是return不了,其他都没问题。本人再return前面加了一个输出Love,也输出了
说明执行到return 0这一步了。但是执行不了。
执行程序的话,最后是出错,return一个随机数。
求问
原因是结果溢出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
什么编译器,在哪看到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) 函数没有返回值