2014-09-12 134 views
-3

我的程序应该找到数字的因素并用逗号打印出来。除了最后一个。那里没有逗号。C++我不想在最后一个值后输入逗号

#include <iostream> 
using namespace std; 
int main() 
{ 
    int number; 
    cin >> number; 

    if (number < 1) 
    { 
     cout << 0; 
    } 
    else if (number == 1) 
    { 
     cout << number; 
    } 

    for (int i=2; i <= number; i++) 
    { 

     while (number % i == 0) 
     { 
      number /= i; 
      cout << i << ", "; 
     } 

    } 
    cout << endl; 
    return 0; 
} 
+7

让我们通过它......你怎么知道你什么时候达到最后的价值?如果只输出一个不是最后一个值的逗号,你能做些什么? – Leon 2014-09-12 11:57:17

+4

把第一个数字以外的数字前面的逗号 – 2014-09-12 12:01:12

+1

upvoter!哈哈哈哈。xD – dhein 2014-09-12 12:09:38

回答

2

你想是这样的:

for (int i=2; i <= number; i++) 
{ 

    while (number % i == 0) 
    { 
     number /= i; 
     cout << i << (number != 1 ? ", " : ""); 
    } 

} 
+1

哈哈哈哈。 D.更神秘:D。但是,回到原点:你认为在他无法查看他自己的简单代码之后,他会明白这个情况检查部分是什么样的吗?^^您也应该对它进行xplain。 – dhein 2014-09-12 12:09:00

+0

非常感谢你 – 2014-09-12 12:26:30

+0

在这种情况下工作,而不是解决问题的一般方法 – CashCow 2014-09-12 12:52:29

0

的简单的解决方案:

std::string sep; 

for(int i = 2; i <= number; ++i) 
{ 
    while(number % i == 0) 
    { 
     std::cout << sep << i; 
     sep = ", "; 

     number = i; 
    } 
} 

无需在循环if,但在第一次迭代sep是一个空字符串

用布尔最简单的方法是:

bool first = true; 

for(int i = 2; i <= number; ++i) 
{ 
    while(number % i == 0) 
    { 
     if(!first) 
      std::cout << ", "; 
     else 
      first = false; 

     std::cout << i; 

     number /= i; 
    } 
} 

随你的选择。关于第一个有一些好处,除了它每次迭代循环都会将sep重置为相同的值。你可以在它之前放置if(sep.empty())

相关问题