C++ 打印一系列数字优化第1部分

C++ 打印一系列数字优化第1部分,c++,algorithm,optimization,addition,C++,Algorithm,Optimization,Addition,假设您想制作一个程序,反复打印数字1-9 1234567892345678912345678123456789 我想最明显的方法是使用循环 int number = 1; while(true) { print(number); number = number + 1; if(number > 9) number = 1; } 在我进一步讨论之前,这是最好的方法还是更常见的方法?首先,你为什么要“优化”这一点?你在优化速度吗?空间可读性还是可维护性

假设您想制作一个程序,反复打印数字1-9

1234567892345678912345678123456789

我想最明显的方法是使用循环

int number = 1;
while(true)
{
    print(number);
    number = number + 1;
    if(number > 9)
        number = 1;
}

在我进一步讨论之前,这是最好的方法还是更常见的方法?

首先,你为什么要“优化”这一点?你在优化速度吗?空间可读性还是可维护性

“较短”的方法是:

for (int i = 1; true; i++)
{
    print(i);
    i = (i + 1) % 10;
}
我所做的只是:

  • 将while循环转换为for 环路
  • 换算增量+ 有条件地增加+mod 手术
  • 这确实是一个微观优化的例子。

    这样行吗

    while(true)
    {
        print("123456789");
    }
    

    我的答案基于Mike的答案,但经过进一步优化:

    for (int i = 1; true; i++)
    {
        std::cout << ('0' + i);
        i = (i + 1) % 10;
    }
    
    for(int i=1;true;i++)
    {
    std::cout最明显的方式是:

    for (;;)
    {
        for (int i = 1; i < 10; ++i)
        {
            print(i);
        }
    }
    
    (;;)的
    
    {
    对于(int i=1;i<10;++i)
    {
    印刷品(一);
    }
    }
    

    我无法理解您为什么要对其进行优化。输出将压倒计算,任何类型的优化都是不相关的。

    到目前为止,使用
    %
    运算符的每个人似乎都有一种印象,即涉及到十个值。他们还忽略了这样一个事实,即他们的逻辑有时会生成
    0
    做你想做的事情的方法是:

    int i = 1;
    while (true) {
        print(i);
        i = (i % 9) + 1;
    }
    

    @迈克:是的,只要它提供OP所需的相同输出。我能看到这是“错误”的唯一情况是,如果它要求它连续地按顺序输出数字,而不是一次全部输出。那,或者如果print()有一些从代码中看不明显的副作用。@Mike:使用
    int
    s可能也会有这个问题,除非你关闭输出缓冲。否避免了问题的目的为什么你想要一个无限循环来打印数字?常见的理论问题不要想太多这不起作用。第一次通过,循环体打印
    1
    并将
    i
    设置为2。然后循环增量将
    i
    设置为3,第二次通过循环打印
    3