首页 新闻 会员 周边 捐助

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

0
[已关闭问题] 解决于 2012-05-18 08:35

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

写一个程序打印 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;
}

谢谢回答!

 

icyme的主页 icyme | 初学一级 | 园豆:77
提问于:2012-05-12 01:12
< >
分享
其他回答(2)
0

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

artwl | 园豆:16736 (专家六级) | 2012-05-12 07:32

谢谢朋友的热情回答!

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-05-13 13:32
0

使用stringbuilder,

 msg += i + "\n";寫成  msg += i。tostring() + "\n";

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-12 08:20

谢谢朋友的热情回答!

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-05-13 13:33
1
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两个类型的掌握问题。

无之无 | 园豆:5095 (大侠五级) | 2012-05-12 08:27

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

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-05-13 13:35

@Technology: 那是你没看懂。看懂了就不会这样说了。你可以试运行看看是否有。

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-05-25 10:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册