为什么这段代码会为我的号码增加额外的零?

时间:2015-01-07 21:27:47

标签: c++

以下代码

#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

bool qualities(double number){
    //function qualities, irrelevant to question
}

int main(){
    double pandigital = 123456789;
    double sum = 0;
    string strpan = to_string(pandigital);
    while (next_permutation(strpan.begin(), strpan.end())){
        cout << strpan << endl;
        if (qualities(pandigital)){
            sum += pandigital;
        }
        next_permutation(strpan.begin(), strpan.end());
        break;
    }
    cout << "sum is " << sum << endl;
    cin.get();
}

从这段代码

开始出现以下问题
double pandigital = 123456789;
double sum = 0;
string strpan = to_string(pandigital);
while (next_permutation(strpan.begin(), strpan.end())){
    cout << strpan << endl;

问题是strpan附加了一个额外的零,这是一个错误。如果我为pandigital添加零,所以我们有1234567890,它仍会追加零。

1 个答案:

答案 0 :(得分:3)

零来自std::to_stringdouble转换为string:而不是生成"123456789",而是"123456789.0"

要解决此问题,请将pandigital声明为int,或在将其转换为string时添加演员:

string strpan = to_string((int)pandigital);

有了这个问题,你还有另一个修复方法:while循环的每次迭代都会调用next_permutation两次 - 一次在循环的标题中,一次在正文中。您应该删除在循环体中执行的调用。

最后,回想一下,为了完成所有可能的排列,应该在范围排序时进行next_permutation的初始调用。这不是您的号码的问题,因为数字按升序排列,但如果您以不同的号码开头,它可能会成为一个问题。