R*~~

layout:default
date:2025-06-23

include <stdio.h>

int main() {
int N;
scanf("%d", &N);
int a = 3048 * N;
int b = a / 10; // 商(整数部分)
int c = a % 10; // 余数
if (c == 0)
printf("%d\n", b);
else
printf("%d.%d\n", b, c);
return 0;
收获:本题考查的是浮点数计算的精度丢失,即“十进制小数无法用有限位二进制精确表示” 导致的误差。计算机用二进制存储浮点数如float,double但很多十进制小数(如0.1 304.8没法用有限位二进制精确表示like十进制存不了1/3只能存近似值1/3 = 0.333...无限循环小数,无法用有限位十进制精确表示,二进制里0.1(十进制)=0.0001100110011... (二)也无限循环,会截断存储近似值);故,解决方法是通过整数运算(3048×N ÷ 10绕开浮点数的近似存储,保证计算绝对精确

posted @ 2025-06-24 21:45  ervgiu28hg34y827  阅读(8)  评论(0)    收藏  举报