Dlang 中的 FizzBuzz
FizzBuzz in Dlang
我正在尝试让 fizzbuzz 在 D 中工作,但我终究不知道问题出在哪里。我试过颠倒逻辑,当它不合适的时候它确实会写两个词,但是当它合适的时候它什么都不写。
这是输出内容的屏幕截图:http://puu.sh/p67Hd/2a5a598b1b.png
import std.stdio;
void main() {
for (uint i = 0; i < 100; i++) {
if (i%5 && i%3) write(i);
if (!i%3) write("Fizz");
if (!i%5) write("Buzz");
writeln();
}
}
if(!i%3)
实际上会被解释为 if((!i)%3)
,这会导致 0%3(错误)或 1%3(正确)。如果 n 为 0,!n
将得到 1,否则它将始终为 0。因为它是从 0 到 100,所以 (!i) % 3
只会在开始时为真一次。这就是输出开始时出现 FizzBuzz 的原因。
所以您的代码应该如下所示:
import std.stdio;
void main() {
for (uint i = 0; i < 100; i++) {
if (i%5 && i%3) write(i);
if (!(i%3)) write("Fizz");
if (!(i%5)) write("Buzz");
writeln();
}
}
!
运算符优先于 %
,因此您的 if
语句看起来像
if ((!i) % 3) write("Fizz");
if ((!i) % 5) write("Buzz");
并且因为所有 i
都是非零的(除了第一次),!i
总是 0
并且 0 % 5
和 0 % 3
是总是 0 (false)
。
要修复,您需要做的就是在 %
操作周围添加括号
if (!(i % 3)) write("Fizz");
if (!(i % 5)) write("Buzz");
我正在尝试让 fizzbuzz 在 D 中工作,但我终究不知道问题出在哪里。我试过颠倒逻辑,当它不合适的时候它确实会写两个词,但是当它合适的时候它什么都不写。
这是输出内容的屏幕截图:http://puu.sh/p67Hd/2a5a598b1b.png
import std.stdio;
void main() {
for (uint i = 0; i < 100; i++) {
if (i%5 && i%3) write(i);
if (!i%3) write("Fizz");
if (!i%5) write("Buzz");
writeln();
}
}
if(!i%3)
实际上会被解释为 if((!i)%3)
,这会导致 0%3(错误)或 1%3(正确)。如果 n 为 0,!n
将得到 1,否则它将始终为 0。因为它是从 0 到 100,所以 (!i) % 3
只会在开始时为真一次。这就是输出开始时出现 FizzBuzz 的原因。
所以您的代码应该如下所示:
import std.stdio;
void main() {
for (uint i = 0; i < 100; i++) {
if (i%5 && i%3) write(i);
if (!(i%3)) write("Fizz");
if (!(i%5)) write("Buzz");
writeln();
}
}
!
运算符优先于 %
,因此您的 if
语句看起来像
if ((!i) % 3) write("Fizz");
if ((!i) % 5) write("Buzz");
并且因为所有 i
都是非零的(除了第一次),!i
总是 0
并且 0 % 5
和 0 % 3
是总是 0 (false)
。
要修复,您需要做的就是在 %
操作周围添加括号
if (!(i % 3)) write("Fizz");
if (!(i % 5)) write("Buzz");