当前位置: 首页 > 知识库问答 >
问题:

为0的大输入提供浮点异常的排序函数

谢英耀
2023-03-14

给定一个非负整数的列表,将它们排列成最大的数。

例如,给定[3,30,34,5,9],形成的最大数是9534330。

注意:结果可能很大,因此需要返回一个字符串,而不是整数。

bool radixOrder(pair<int,int> p1, pair<int,int> p2)
{
    int val1=p1.first;
    int e1=p1.second;
    int val2=p2.first;
    int e2=p2.second;
    if(val1==val2 && e1==e2)
    {
        return val1==val2;
    }
    else if(((val1/e1)%10) == ((val2/e2)%10))
    {
        while(val1/e1 == val2/e2)
        {
            if(e1/10!=0)
                e1=e1/10;
            if(e2/10!=0)
                e2=e2/10;
        }
        return (val1/e1)%10 > (val2/e2)%10;
    }
    else
    {
        return (val1/e1)%10 > (val2/e2)%10;
    }
}

vector<pair<int,int> > createVNew(vector<int>& v)
{
    vector<pair<int,int> > temp;
    for(int i=0; i<v.size(); i++)
    {
        cout << i << endl;
        int val=v[i], e=1;
        if(v[i]==0)
        {
            temp.push_back(make_pair(val, 1));
        }
        else
        {
            while((e/v[i])==0)
                e*=10;
            if(e!=v[i])
            {
                temp.push_back(make_pair(val,e/10));
            }
            else if(e==v[i])
            {
                temp.push_back(make_pair(val,e));
            }
        }
    }
    return temp;
}

string largestNumber(vector<int>& v)
{
    int e=1;
    vector< pair<int,int> > vnew=createVNew(v);
    sort(vnew.begin(), vnew.end(), radixOrder);
    stringstream s;
    for(int i=0; i<vnew.size(); i++)
    {
        s<<vnew[i].first;
    }
    return s.str();
}

它给出了浮点异常。

我曾试着找到解决办法,但没能找到。我是cpp的初学者,任何帮助都会很好。

共有1个答案

易超
2023-03-14

您的radixsort函数违反了compare要求,即非自反性(即radixorder(x,x)必须返回false,但它返回true,因为执行转到第一个if分支)。

所以这里有一个经典的未定义行为示例。我认为这段代码应该以某种方式重写,就像

if (e1==e2)
{
    return val1 > val2;
}

不过,我可以通过将输入数字按相反顺序排序为字符串来解决这个问题。

 类似资料:
  • 问题内容: 我正在尝试为两个不同的Linux环境构建一个简单的C程序。在一个设备上,程序运行正常,在另一设备上,程序生成浮点异常。该程序除了从main返回0之外什么都不做,这使我相信与启动代码也许不兼容,也许是ABI? 该程序使用gcc编译,具有以下构建规范: 使用内置规格。目标:i386-redhat-linux配置为:../configure –prefix = / usr –mandir =

  • 我试图为两个不同的Linux环境构建一个简单的C程序。在一个设备上程序运行良好,在另一个设备上程序产生浮点异常。该程序除了从main返回0外什么也不做,这让我相信与启动代码有一些不兼容的地方,也许是ABI? 该程序是用gcc编译的,具有以下构建规范: 使用内置规格。目标:i386-redhat-linux配置为:../configure--prefix=/usr--mandir=/usr/shar

  • 问题内容: 我正在尝试从android解析json,但出现了这个奇怪的异常。我的json数据是 {“ id”:“ 1”,“ owner”:“ 1”,“ name”:“ gravitas”,“ description”:“是一场盛会”,“ start_time”:“ 0000-00-00 00:00:00 “,” end_time“:” 0000-00-00 00:00:00“,” venue“:”

  • 我正在尝试从数据库的某一行获取文本。为此,我做了这个函数 我这样称呼它: 我的桌子看起来像这样: 我得到这个错误: 为什么我会犯这个错误?我做错了什么? 提前感谢。

  • {java.io.ioException:SERVICE_NOT_AVAILABLE at system.runtime.exceptionservices.exceptiondispatchinfo.throw()[0x0000c]in/src/mono.android/src/runtime/jnienv.g.cs:195 at android.gms.gcm.iid.instanceId.g

  • 0.9.2 新版功能. 封装字符串,提供 ANSI 色彩输出的函数。 本模块中的所有函数均返回包裹对应色彩 ANSI 字符的 text 字符串。 例如,在支持 ANSI 的终端中打印绿色文字: from fabric.colors import green print(green("This text is green!")) 这些函数返回值都是修改后的字符串,因此你也可以嵌套使用它们: fro