用float底部会出现随机数,怎么处理呀

P5705 【深基2.例7】数字反转

PetterZhukov @ 2020-08-22 23:23:21

这是代码

#include <stdio.h>
int main()
{
    float k;
    int t=0,k1;
    scanf("%f",&k);
    if(k-(int)k>0)
        while(k-(int)k>0)
        {
            k*=10.0;
            t++;
        }
    k1=k;
    int count=0;
    while(k1>0)
    {
        printf("%d",k1%10);
        k1/=10;
        count++;
        if(count==t) printf(".");
    }
    printf("\n");
    return 0;
}

比如输入132.456,我单步调试看到k被存为123.45601,最后多出来了01导致失败

所以float还有救吗(字符串和int真香)


by Spasmodic @ 2020-08-22 23:26:08

@PetterZhukov double 学习一下?


by SHOJYS @ 2020-08-23 00:46:32

@PetterZhukov double精度比float高,试试用double
输入输出double是%lf


by skye_wang @ 2020-08-23 07:54:30

题目上说:输入一个不小于 100 且小于 1000,同时包括小数点后一位的一个浮点数。 那我们就可以认为它是 三位整数+小数点+一位整数 那就可以分别翻转。


by skye_wang @ 2020-08-23 07:56:48

代码如下(AC):

#include <bits/stdc++.h>
using namespace std;
int a, b;
char c;
int a1, a2, a3;
int main(){
    cin >> a >> c >> b;
    a1 = a / 100 % 10;
    a2 = a / 10 % 10;
    a3 = a / 1 % 10;
    a = a3 * 100 + a2 * 10 + a1;
    cout << b << c << a;
    return 0;
}

by PetterZhukov @ 2020-08-23 15:40:22

@sky_wang int我了解,谢了


by PetterZhukov @ 2020-08-23 15:44:30

@SHOJYS 我用cb编译运行得出了错误答案,但是用上述代码直接跑洛谷成功了……可能是ide不同吧 多谢啦


|