今在网上看到一个问题,自己试着做了一下。试题题目如下:
写一个程序打印 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; }
谢谢回答!
8 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
三的倍数和五的倍数实际上就是15的整数倍。
代码就可以简化成
View Code
var j = (i % 15) == 0 ? "FizzBuzz\n" : (i % 3) == 0 ? "Fizz\n" : (i % 5) == 0 ? "Buzz\n" : i.ToString();
stringbulider 这个想用就用,不想用算了。
三目运算系统会进行优化。
这样的代码运行怎么 都会很快。
要知道,执行慢不会因为单一方法或者语句执行的慢。而是因为整体的结构设计的不好。
就算是你用10000次反射在这里,速度都还是很快的。
别太纠结到一个个方法这样的优化。
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
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两个类型的掌握问题。
- 8 回答
- 0 关注
- 543 浏览
添加回答
举报
0/150
提交
取消