C++ 为什么这个代码会给我的号码加上一个额外的零?

C++ 为什么这个代码会给我的号码加上一个额外的零?,c++,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 = 12345

下面的代码

#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();
}
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
布尔质量(双倍数字){
//功能性质,与问题无关
}
int main(){
双泛数字=123456789;
双和=0;
字符串strpan=to_字符串(泛数字);
while(下一个置换(strpan.begin(),strpan.end()){

coutZero来自
std::to_string
double
转换为
string
:它不是生成
“123456789”
,而是生成
“123456789.0”

要解决此问题,请将
pandigital
声明为
int
,或在将其转换为
字符串时添加强制转换:

string strpan = to_string((int)pandigital);
解决了这个问题后,您需要做另一个修复:每次迭代
while
循环调用
next_permutation
两次-一次在循环头中,一次在循环体中。您应该删除在循环体中执行的调用


最后,回想一下,为了完成所有可能的排列,在对范围进行排序时,应首先调用
next\u permutation
。这对您的号码没有问题,因为数字是按升序排列的,但如果您从不同的号码开始,可能会出现问题。

您想做什么看起来您正在将这些数字转换为字符串,然后将字符串具体化。我正在将数字转换为字符串,对其进行置换,然后(稍后)转换回整数。break语句是临时的,将在程序完成时删除。因为
pandigital
不会改变代码
的质量(pandigital)
将始终计算为相同的值。因此,您可以将其从
while
循环中去掉。同时,您调用
next_permutation
两次,这可能是错误的。@Don喉“转换回整数”如果它假定为整数,为什么要使用
double
string strpan = to_string((int)pandigital);