以下代码
#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
,它仍会追加零。
答案 0 :(得分:3)
零来自std::to_string
将double
转换为string
:而不是生成"123456789"
,而是"123456789.0"
。
要解决此问题,请将pandigital
声明为int
,或在将其转换为string
时添加演员:
string strpan = to_string((int)pandigital);
有了这个问题,你还有另一个修复方法:while
循环的每次迭代都会调用next_permutation
两次 - 一次在循环的标题中,一次在正文中。您应该删除在循环体中执行的调用。
最后,回想一下,为了完成所有可能的排列,应该在范围排序时进行next_permutation
的初始调用。这不是您的号码的问题,因为数字按升序排列,但如果您以不同的号码开头,它可能会成为一个问题。