noob19 成绩

本题也较为简单。但是我想走捷径的时候出现了错误。

image

image

 因为保证是10的倍数,我以为这样可以。

其实这样是不可以的,因为会存在类型提升

a*0.2 --> int * double --> double * double = double 与%d不匹配 这是未定义行为 就会产生不符合预期的值。

解决方案也很简单,直接转换他也可以。或者每个数先/10再×2或3或5,这样避免了double的产生,纯粹使用整数乘除法。
Ⅰ直接转换的方法:printf("%d",(int)(a*0.2+b*0.3+c*0.5));
Ⅱ整数乘除的方法:printf("%d",a/10*2+b/10*3+c/10*5);
Ⅲ直接截取输出的方法:printf("%.0lf",a*0.2+b*0.3+c*0.5); (直接对输出进行截取,本质上还是一个double数)
 
Nowasiki
posted @ 2025-12-27 10:10  Nowasiki  阅读(3)  评论(0)    收藏  举报