我今天发现了一个之前没有注意到的问题
是一个关于运算符的问题,涉及运算符的优先级,以及计算机计算和人脑计算的区别
int main()
{
int n = 153;//153是水仙花数
if (n == n % 10 * n % 10 * n % 10 + n / 10 % 10 * n / 10 % 10 * n / 10 % 10 + n % 100 * n % 100 * n % 100)
{
printf("%d", n);
}
else
printf("error");
return 0;
}
我们能想想的到最后的输出会是什么吗???
可是为什么会这个结果呢?这明明就是数学的计算方法啊
就是因为这是数学的计算方法才是又问题的,我们可以手算一下就能发现问题了。
我们只算n%10*n%10*n%10
当n是153的时候,n%10就是3,数学中就是3*3*3=27
但是计算机中是这样的:
n%10*n=459
n%10*n%10=9
n%10*n%10*n=1377
n%10*n%10*n%10=7---计算完毕
诶,是不是发现了问题了,这两个根本不一样的呀
最后的取余只有个位数,但是结果会是两位数
2.我们可以加括号来改变这种计算的优先级,使他们先计算每一个n%10然后再让他们相乘
3.最后我们需要知道的就是符号操作的优先级
数学运算符的优先级>比较运算符>赋值运算符