2015-01-07 61 views
-1

下面的代码为什么此代码会为我的号码添加额外的零?

#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

你想做什么?它看起来像你将这些数字转换为一个字符串,然后将字符串连接起来。 – Falmarri

+0

我将数字转换为一个字符串,对它进行排列,然后(稍后)将其转换回整数。 break语句是临时的,当程序结束时会被删除。 –

+1

由于'pandigital'不会在你的代码中改变'品质(pandigital)'总是会评估为相同的值。所以你可以从'while'循环中取出它。 –

回答

3

零来自std::to_string转换doublestring:而不是生产"123456789",它使"123456789.0"

要将其转换为string时解决此问题,声明pandigitalint,或添加投:

string strpan = to_string((int)pandigital); 

带着这个问题的出路,你有另一种修复,使:每次迭代您的while循环调用next_permutation两次 - 一次在循环的标题中,一次在主体中。您应该删除在循环体中执行的调用。

最后,回想一下,为了经历所有可能的排列,当排序范围时,应该首先调用next_permutation。这对您的号码不是问题,因为数字按升序排列,但如果您以不同的号码开头,则可能会成为问题。

相关问题