【发布时间】:2013-06-04 23:09:18
【问题描述】:
我必须写一个函数来计算传入的无符号整数的log base 16的下限。对于我们允许使用哪些运算符和哪些常量有限制,我们只能专门使用for循环.
为了清楚起见,我们不能使用任何条件语句(if、else、switch ...)。函数原型为:
int floor_log16(unsigned int x);
允许的运算符:++--=&|~^<<!>>
允许的常量:1234816
我写了一个版本的程序如下:
int floor_log16(unsigned int x) {
int index=1;
int count=(1!=1);
count--;
for(; index<=x; index<<=4) {
count++;
}
return count;
}
这似乎可以按需要工作。但是,我意识到,基于后面的功能和我们必须编写的所需功能的描述,我注意到在“允许的运算符”下有时会列出> 和<。
我推断这意味着因为对于上面列出的floor_log16 函数,我们没有被明确告知使用> 或<,我只能假设上面发布的解决方案不会被接受。
这让我很困惑,因为我不明白你怎么可能有一个没有布尔检查的 for 循环?
在满足条件时进行迭代的整个想法不就是循环吗?
【问题讨论】:
-
出于兴趣,您可以使用 for 循环创建一个 if 语句,因此 if 语句的限制有些微不足道(类似于
else) -if (condition) statement;=for(;condition;) {statement; break;},但我不认为你应该这样做。 -
可能类似于
for(;x;x>>4)?x == 0时会停止 -
“我不明白你怎么可能有一个没有布尔检查的 for 循环?” -- for 循环本身进行布尔检查......它根据表达式的值继续或结束。 “在满足条件时循环迭代的整个想法不是吗?” -- 不,它是在表达式非零时进行迭代。如果您要实际阅读文档而不是对事物的“整体想法”进行哲学思考,这对您来说会很清楚。考虑到具有适当智力技能的学生将获得更好的成绩并获得工作。
-
int count = (1 != 1)... "!=" 不是允许的运算符。index <<= 4... 也不是允许的运算符,但index = index << 4可以。 -
我认为允许的操作符已经足够完成这个任务了。