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;
}