这个数到底是怎么了???

文章通过一个C语言代码示例展示了运算符优先级对计算结果的影响。在计算水仙花数的程序中,由于未正确使用括号,导致计算机计算的结果与预期的数学计算不同。问题在于取余运算后的结果并未按预期顺序相乘,强调了理解运算符优先级的重要性。解决方案是添加括号以明确计算顺序。
摘要由CSDN通过智能技术生成

我今天发现了一个之前没有注意到的问题

是一个关于运算符的问题,涉及运算符的优先级,以及计算机计算和人脑计算的区别

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.最后我们需要知道的就是符号操作的优先级

数学运算符的优先级>比较运算符>赋值运算符

(18条消息) C语言小白必看——操作符详解(操作符优先级)_操作符的优先级别_燕麦冲冲冲的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值