【问题标题】:How to fill the separators between integer without the redundant one?如何填充整数之间的分隔符而没有多余的分隔符?
【发布时间】:2016-01-12 12:13:45
【问题描述】:

我正在尝试获取正整数的因子。我想要的是8 = 2*2*2。但是,我得到的是*2*2*2。我怎样才能搭上第一个*?有没有更好地描述这种情况的标准方法?

#include <iostream>
#include <iomanip>
using namespace std;
int main(){
    int num, i = 2;
    const char separator  = '*';
    cout << "Input a positive integer: ";
    cin >> num;
    while(num !=1){
        while((num % i) != 0){
            i++;
        }
        cout << setw(2) << setfill(separator) << i;
        num = num/i;
    }
}

输入一个正整数:8

*2*2*2

【问题讨论】:

标签: c++


【解决方案1】:

使用更新的分隔符。从"" 开始,然后设置为"*"

#include <iostream>
#include <iomanip>
using namespace std;
int main(){
    int num, i = 2;
    const char *separator  = "";
    cout << "Input a positive integer: ";
    cin >> num;
    do {
        while((num % i) != 0){
            i++;
        }
        cout << separator << i;
        separator  = "*";
        num = num/i;
    } while (num > 1);
}

还更改为 do 循环以应对 num == 1num == 0 在 OP 的原始代码中不打印任何内容。代码可以使用unsigned 作为进一步的扩展/保护。

【讨论】:

    【解决方案2】:

    实现这一点的一种方法是仅在 num 不等于 1 时输出 setfill(separator)。

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main(){
        int num, i = 2;
        const char separator  = '*';
        cout << "Input a positive integer: ";
        cin >> num;
        while(num !=1){
            while((num % i) != 0){
                i++;
            }
            cout << setw(2) << i;
            num = num/i;
            if (num != 1)
                cout << setfill(separator);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2020-03-19
      • 2015-12-08
      • 2021-02-23
      • 2016-08-21
      • 1970-01-01
      相关资源
      最近更新 更多