以下代码
#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
,则我们有,它将仍附加一个额外的零。
零来源于std::to_string
转换double
到string
:而不是生产"123456789"
,这让"123456789.0"
。
要解决此问题,请将声明pandigital
为int
,或在将其转换为时添加强制类型转换string
:
string strpan = to_string((int)pandigital);
解决了这个问题后,您需要进行另一项修复:循环的每次迭代都while
调用next_permutation
两次-一次在循环头中,一次在主体中。您应该删除在循环主体中执行的调用。
最后,回想一下,为了对所有可能的排列next_permutation
进行排序,应在对范围进行排序时进行的初始调用。您的号码不是问题,因为数字是按升序排列的,但是如果您以其他号码开头,则可能会成为问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句