程序员的天堂的阶梯,没有逃脱的fizz buzz。在任何地方的采访中都会出现,这也是学习一门新语言时写的一个有用的小任务。这样做的额外好处是可能会改变您看待问题的方式。
我常用的 c# 解决方案非常简单。
public static string fizzbuzz(int num){ var divby3 = num % 3 == 0; var divby5 = num % 5 == 0; string word; if (divby3 && divby5) { word = "fizzbuzz"; } else if (divby3) { word = "fizz"; } else if (divby5) { word = "buzz"; } else { word = num.tostring(); } return word;}public static void main(string[] args){ for(var i=1; i<=100; i++) { var word = fizzbuzz(i); console.write($"{word} "); }}
登录后复制
直到我用 c 语言写了这个,我才意识到这种方法是多么浪费。 c 中的内存管理是手动处理的,因此问题所在立即显而易见。在 c# 代码中,我们为每次调用 fizzbuzz 创建一个字符串。这是在循环中发生的,因此我们快速分配几个字符串。然而,每个在循环中仅使用一次。之后我们必须等待垃圾收集器注意到这一点并回收字符串使用的内存。
在 c 中,我决定将缓冲区传递给函数。每次通过循环,我们都会清除缓冲区,写入它,然后打印出来。调用者需要做更多的工作,但我们的内存使用效率更高。
void fizzBuzz(int num, char *buf){ bool isFizz = num % 3 == 0; bool isBuzz = num % 5 == 0; if (isFizz && isBuzz) { sprintf(buf, "%s", "FizzBuzz"); } else if(isFizz) { sprintf(buf, "%s", "Fizz"); } else if(isBuzz) { sprintf(buf, "%s", "Buzz"); } else { sprintf(buf, "%d", num); }}int main(){ const size_t BUF_MAX = 128; char *buf = (char *)malloc(sizeof(char) * BUF_MAX); for (int i=1; i<100; i++) { memset(buf, '', BUF_MAX); fizzBuzz(i, buf); printf("%s ", buf); } free(buf); buf = NULL; return 0;}
登录后复制
花时间用其他语言编写即使是简单的东西也可以改变我们的观点。
以上就是嘶嘶声的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2451344.html