给你一个整数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的,估计函数里面也有判断的,估计不是这样解的哈