给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:
如果这个数被3整除,打印fizz
.
如果这个数被5整除,打印buzz
.
如果这个数能同时被3
和5
整除,打印fizz buzz
.
要求:只用一个if判断
static List<string> Cal(int n) { List<string> res = new List<string>(); string[] temp = { "fizz", "fizz buzz", "buzz" }; for (int i = 1; i <= n; i++) { if (i % 3 != 0 && i % 5 != 0) { res.Add(i.ToString()); } else { int a = i % 3; int b = i % 5; int off = a - b; //映射(-1-0),(0,1),(1,2) int index = Math.Sign(off / (double)int.MaxValue) + 1; res.Add(temp[index]); } } return res; }
我想的办法就是排除不是3和5倍数的数,然后将是3和5倍数的数通过一个映射计算到数组的下标,得到对应的字符串。
这里使用了Math.Sign不知道是不是取巧了,刚好这个函数是返回-1,0,1的,估计函数里面也有判断的,估计不是这样解的哈