【发布时间】:2018-07-03 04:25:25
【问题描述】:
为什么这段代码输出错误?
问题:给定一个非负整数列表,将它们排列成最大的数。
例如:
给定 [3, 30, 34, 5, 9],最大的形成数是 9534330。
注意:结果可能很大,所以需要返回一个字符串而不是一个整数。
这是我的代码:
bool compareinterval(int x,int y);
string Solution::largestNumber(const vector<int> &A)
{
//sort(A.begin(),A.end());
vector< int>B;
int i,x=0;
for(i=0;i<A.size();i++)
B.push_back(A[i]);
sort(B.begin(),B.end(),compareinterval);
vector<string> vect;
string result;
for(i=0;i<B.size();i++)
{
ostringstream convert;
convert<<B[i];
if(B[i]!=0)
x=1;
string str1=convert.str();
result.append(str1);
}
if(x==0)
return "0";
else
return result;
}
bool compareinterval(int x,int y)
{
ostringstream convert;
string result;
convert<<x;
string str1=convert.str();
//ostringstream convert;
//string result;
// ostringstream convert;
convert<<y;
string str2=convert.str();
int i;
for(i=0;i<min(str1.length(),str2.length());i++)
{
if((str1[i]-'0')<(str2[i]-'0'))
return false;
if((str1[i]-'0')>(str2[i]-'0'))
return true;
}
//return true;
if(str1.length()<str2.length())
return true;
else
return false;
}
这是输入和输出:
input:A : [ 9, 99, 999, 9999, 9998 ]
my output:999899999999
我定义了无法正常工作的比较功能。
有人可以改正吗?
【问题讨论】:
-
convert<<x; convert<<y;您是否验证了它的工作方式是否符合您的要求? -
@Superman 给出的算法无疑是一个更可取的算法,应该对您有所帮助,但您的问题是为什么您的代码不起作用。换句话说,“请为我调试我的代码”,这通常被认为与 SO 无关。
-
@goyalsaransh002 !我认为帖子上的示例不正确。
[3, 30, 34, 5, 9]->9534330对吗?9534303不是吗? -
@Alexander 9534330 明显大于 9534303。
标签: c++