今在网上看到一个问题,自己试着做了一下。试题题目如下:
写一个程序打印 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;
}
谢谢回答!
简洁的写法倒是有,更高效的估计不多,你这种写法已经挺高效了,另外把string换为stringbuilder貌似会更好点
谢谢朋友的热情回答!
使用stringbuilder,
msg += i + "\n";寫成 msg += i。tostring() + "\n";
谢谢朋友的热情回答!
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: 那是你没看懂。看懂了就不会这样说了。你可以试运行看看是否有。