c中怎样把一个扩大的浮点数真正变化为一个整数int,而不是在强制转换后还要继承float的精确度最少币数【问题描述】给定以元为单位的钱数,要求用100元、50元、20元、10元、5元、2元、1元、5

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 23:33:13

c中怎样把一个扩大的浮点数真正变化为一个整数int,而不是在强制转换后还要继承float的精确度最少币数【问题描述】给定以元为单位的钱数,要求用100元、50元、20元、10元、5元、2元、1元、5
c中怎样把一个扩大的浮点数真正变化为一个整数int,而不是在强制转换后还要继承float的精确度
最少币数
【问题描述】
给定以元为单位的钱数,要求用100元、50元、20元、10元、5元、2元、1元、5角、2角、1角、5分、2分和1分面值的币来表示,要求币的总张(枚)数最少,求各需要多少张(枚).(1分-1000元)
我的疑问:这个程序对大部分值是正确的,但当如输入x=74.43时,继而y=7443运算结果的fen数目是错误的;当简单修改程序直接令y=7443时结果是正确的.即问题在式子y=(int)(x*100);上怎么修改这个程序让他无误运行呢?
#include
#include
int main()
{
float x;
int y,a10000,a5000,a2000,a1000,a500,a200,a100,a50,a20,a10,a5,a2,a1;
scanf("%f",&x);
y=(int)(x*100);
a10000=y/10000;
y=y-10000*a10000;
a5000=y/5000;
y=y-5000*a5000;
a2000=y/2000;
y=y-2000*a2000;
a1000=y/1000;
y=y-1000*a1000;
a500=y/500;
y=y-500*a500;
a200=y/200;
y=y-200*a200;
a100=y/100;
y=y-100*a100;
a50=y/50;
y=y-50*a50;
a20=y/20;
y=y-20*a20;
a10=y/10;
y=y-10*a10;
a5=y/5;
y=y-5*a5;
a2=y/2;
y=y-2*a2;
a1=y;
if(a10000>0) printf("100yuan:%d\n",a10000);
if(a5000>0) printf("50yuan:%d\n",a5000);
if(a2000>0) printf("20yuan:%d\n",a2000);
if(a1000>0) printf("10yuan:%d\n",a1000);
if(a500>0) printf("5yuan:%d\n",a500);
if(a200>0) printf("2yuan:%d\n",a200);
if(a100>0) printf("1yuan:%d\n",a100);
if(a50>0) printf("5jiao:%d\n",a50);
if(a20>0) printf("2jiao:%d\n",a20);
if(a10>0) printf("1jiao:%d\n",a10);
if(a5>0) printf("5fen:%d\n",a5);
if(a2>0) printf("2fen:%d\n",a2);
if(a1>0) printf("1fen:%d\n",a1);
system("pause");
return 0;
}

c中怎样把一个扩大的浮点数真正变化为一个整数int,而不是在强制转换后还要继承float的精确度最少币数【问题描述】给定以元为单位的钱数,要求用100元、50元、20元、10元、5元、2元、1元、5
首先,用VC6运行你的程序也是正确.



float浮点数的精度是小数点后6位之内都可以保证,所以你的问题不是float精度问题,因为不清楚你的错误结果是什么,无法猜测.
下面给你一个使用数组和循环的程序,在节省代码的同时,增加了两个安全处理:双精度和安全运算(这个在你的程序中同样适用,你可以修改试试)
#include<stdio.h>
#include<stdlib.h>
int main()
{
    double x;//双精度
    int y,i;
    int a[13]={10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
    int b[13];
    scanf("%lf",&x);
    x= x*100.0;
    y=(int)x;//安全计算

    for (i=0;i<13;i++)
    {
        b[i] = y/a[i];
        y = y%a[i];//y - a[i]*b[i]
    }
    for (i=0;i<13;i++)
    {
        if(b[i]==0) continue;
        if(a[i]<10)//fen
            printf("%d fen: %d\n",a[i],b[i]);
        else if(a[i]<100)//jiao
            printf("%d jiao: %d\n",a[i]/10,b[i]);
        else //yuan
            printf("%d yuan: %d\n",a[i]/100,b[i]);
    }

    system("pause");
    return 0;
}

c中怎样把一个扩大的浮点数真正变化为一个整数int,而不是在强制转换后还要继承float的精确度最少币数【问题描述】给定以元为单位的钱数,要求用100元、50元、20元、10元、5元、2元、1元、5 在C语言中怎样表示一个既有整数又有浮点数的数组 C程序中怎样判断一个浮点数小数部分的位数 在C语言中,如何将一个浮点数变换成整数? C语言中,对浮点数求绝对值的库函数是什么?就是怎么对一个浮点数求绝对值 把一个32浮点型的数符号位去掉 用C语言应该怎么写 C语言中,编写一个求浮点数绝对值的函数,在主函数中输入一个浮点数,输出绝对值(谢谢) 在C语言中,怎么把一个字符串(都是由数字组成)转换成一个浮点数? C中 如何将浮点数转化成整数,如何判定一个浮点数是否等于其整数部分?C语言中 如何将浮点数转化成整数,如何判定一个浮点数是否等于其整数部分? c语言中浮点数四舍五入 .保留一个浮点数小数点后的6位,第3位要四舍五入.如 1.1234.567到1234.570000 C语言中怎样判断输入的是整数还是浮点数 C语言中怎样判断输入的是整数还是浮点数 在C语言中可不可以简单的把浮点数看做小数? C语言,一个浮点数,怎么四舍五入保留到个位数 如果收到了一个字符型的浮点数 比如123.45 如何变成浮点数 白中英的计算机组成原理中关于浮点数表示方法的问题:对于规格化浮点数,E 的范围变 为1到254,真正的指数这样在32位浮点数表示中,要除去E 用全0和全1(255)10表示零和无穷大的特殊情况,指数 浮点数在计算机里面的存储一个负数浮点数在计算机内存中怎么组织啊?比如说二进制-0.11 定义一个类,该类中能实现分别求两个整数、双精度浮点数、单精度浮点数中的较小数的功能 .在线等.