C# 写一个程序打印 1 到 100 这些数字。目前我写了一个能实现功能的方法,但是我怀疑效率不怎么高。

今在网上看到一个问题,自己试着做了一下。试题题目如下:

写一个程序打印 1 到 100 这些数字。但是遇到数字为 3 的倍数的时候,打印“Fizz”替代数字,5的倍数用“Buzz”代替,既是 3 的倍数又是 5 的倍数打印“FizzBuzz”。

 

下面是我实现的方法。请问能否有更简洁的、效率更高的方法没?

public void DoPrintDemo()
{
     string msg = "";
     for (int i = 1; i <= 100; i++)
       {
            if (i % 3 == 0 && i % 5 == 0)
              {
                    msg += "FizzBuzz\n";
              }
            else if (i % 5 == 0)
             {
                   msg += "Buzz\n";
             }
            else if (i % 3 == 0 )
             {
                   msg += "Fizz\n";
             }
            else
             {
                   msg += i + "\n";
             }
       }
      this.divTest.InnerHtml = msg;
}

谢谢回答!

 

12345678_0001
浏览 544回答 8
8回答

蝴蝶不菲

三的倍数和五的倍数实际上就是15的整数倍。 代码就可以简化成 View Code var j = (i % 15) == 0 ? "FizzBuzz\n" : (i % 3) == 0 ? "Fizz\n" : (i % 5) == 0 ? "Buzz\n" : i.ToString(); stringbulider 这个想用就用,不想用算了。 三目运算系统会进行优化。 这样的代码运行怎么 都会很快。 要知道,执行慢不会因为单一方法或者语句执行的慢。而是因为整体的结构设计的不好。 就算是你用10000次反射在这里,速度都还是很快的。 别太纠结到一个个方法这样的优化。

猛跑小猪

简洁的写法倒是有,更高效的估计不多,你这种写法已经挺高效了,另外把string换为stringbuilder貌似会更好点

jeck猫

谢谢朋友的热情回答!

一只萌萌小番薯

使用stringbuilder,  msg += i + "\n";寫成  msg += i。tostring() + "\n";

慕田峪9158850

谢谢朋友的热情回答!

摇曳的蔷薇

public void DoPrintDemo() { string msg = ""; for (int i = 1; i <= 100; i++) { bool normal = true; if (i % 3 == 0) { normal = false; msg += "Fizz"; } if (i % 5 == 0) { normal = false; msg += "Buzz"; } if(normal) { msg += i.ToString(); } msg += "\n"; } this.divTest.InnerHtml = msg; } 没有绝对的优化方案,你这个代码看起来似乎很啰嗦,其实在计算机里的运行性能已经很好了。我给出的代码相对你的代码不一定比你的代码好,只是作为引玉之砖,希望能对你有所帮助。 此外,如果你一定想更进一步的优化,那么使用二进制进行比较判断也是一个方案,只是,3或5的倍数在二进制里并不具备优势,这样或许适得其反。 另外,artwl已经说了,把String使用StringBuilder替代,性能会高很多,但这个跟算法已经没关系了,只是你对String和StringBuilder两个类型的掌握问题。

潇湘沐

谢谢朋友的热情回答!不过,朋友你写的这个方法貌似没有实现这个“既是 3 的倍数又是 5 的倍数打印‘FizzBuzz’”功能的判断呢。

海绵宝宝撒

@Technology: 那是你没看懂。看懂了就不会这样说了。你可以试运行看看是否有。
打开App,查看更多内容
随时随地看视频慕课网APP