对不起,如果之前已经问过这个问题,我很抱歉,但我正在处理Josephus问题,这是我写的代码。
#include<stdio.h>
#include<cs50.h>
#include<math.h>
int main(void)
{
printf("Number of people: ");
float f=GetFloat();
const int a=pow(2,floor(log(f)/log(2)));
float c= 2*(f-2^a)+1;
printf("%f\n", c);
}
当我尝试编译它时,它会给我这个错误信息。
clang -ggdb3 -O0 -std=c99 -Wall -Werror Josephus.c -lcs50 -lm -o Josephus
Josephus.c:11:20: error: invalid operands to binary
expression ('float' and 'float')
float c= 2*(f-2^a)+1;
~~~^~
我试图在代码中写的等式是c = 2(f - 2 ^ a)+ 1 其中“c”是我正在寻找的数字,“f”是人数,“a”是2的小于f的幂。
对于任何语法错误以及我对该主题缺乏了解,我很抱歉,我是编程新手。干杯!
答案 0 :(得分:0)
您的问题是f-2^a
。您可能希望从a
中减去两个幂f
。麻烦是^
是XOR运算符,它的优先级低于减法。编译器将其视为(f-2) xor a
。 xor的LHS是浮点数,所以a被提升为浮点数...而xor不适用于浮点数!
修复是:
f - pow(2.0, a)
或:
f - (1u << a)
(但如果您确信a
在范围内,则仅使用后者。