c++ - 输入一些特殊数字时,“i”的值比应有的值小一
问题描述
我想解决这样一个问题:</p>
从键盘输入指定金额(以元为单位,如345.78),然后显示支付金额的各种面额的人民币金额,要求显示100元、50元、10元、5元、2元,1元,5角,1分,5分,各1分。像345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8
以下是代码:
#include<stdio.h>
int main()
{int a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0;
float m;
printf("enter money:");
scanf("%f",&m);
while(m>100.0)
{m=m-100;
a1++;}
while(m>50.0)
{m=m-50;
a2++;}
while(m>10.0)
{m=m-10;
a3++;}
while(m>5.0)
{m=m-5;
a4++;}
while(m>2.0)
{m=m-2;
a5++;}
while(m>1.0)
{m=m-1;
a6++;}
while(m>0.1)
{m=m-0.1;
a7++;}
while(m>0.05)
{m=m-0.05;
a8++;}
while(m>0.01)
{m=m-0.01;
a9++;}
printf("a1=%d,a2=%d,a3=%d,a4=%d,a5=%d,a6=%d,a7=%d,a8=%d,a9=%d\n",a1,a2,a3,a4,a5,a6,a7,a8,a9);
return 0;
}
#include<stdio.h>
int main()
{
double n,r[8];
int k;
scanf("n=%lf",&n);
int a=n/100;
r[0]=n-a*100;
int b=r[0]/50;
r[1]=r[0]-b*50;
int c=r[1]/10;
r[2]=r[1]-c*10;
int d=r[2]/5;
r[3]=r[2]-d*5;
int e=r[3]/2;
r[4]=r[3]-e*2;
int f=r[4];
r[5]=r[4]-f*1;
int g=r[5]*10.00;
r[6]=r[5]-g*0.1;
int h=r[6]*20.00;
r[7]=r[6]-h*0.05;
int i=r[7]*100.00;
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
printf("%d\n",d);
printf("%d\n",e);
printf("%d\n",f);
printf("%d\n",g);
printf("%d\n",h);
printf("%d\n",i);
return 0;
}
但是,在输入 0.78、0.98、0.99 等数字时,该值i
总是少一。
这是怎么发生的?
解决方案
你应该避免浮点运算。将输入读取为浮点数并将最小单元的数量存储为整数:
#include <iostream>
int main()
{
double input;
std::cin >> input;
int money = input * 100;
for (auto n : {10000, 5000, 1000, 500, 200, 100, 10, 5, 1}) {
std::cout << n / 100.0 << ":\t" << money / n << '\n';
money %= n;
}
return 0;
}
输入:
1288.56
输出:
100: 12
50: 1
10: 3
5: 1
2: 1
1: 1
0.1: 5
0.05: 1
0.01: 1
推荐阅读
- android - KeyboardAvoidingView 在 apk 文件中不起作用-React Native
- javascript - 如何修复错误标识符已使用反应和打字稿声明?
- csv - 将数据加载到 ibm db2 云数据库。授权问题
- javascript - React.createElement:类型无效 - 需要一个字符串但未定义
- npm - 使用 Sqlite3 的电子应用程序 - 致命错误:错误::错误 napi_create_reference
- laravel - 在新的 Laravel 安装上运行 NPM 运行开发时出现问题
- python - 在python中,对象没有按照定义的顺序打印
- google-chrome-extension - Chrome 扩展程序导致 Chrome 变得异常缓慢
- java - 如何通过处理 html 代码中的按钮来更改 Java 中的布尔变量?
- x86 - 在 GDB 中打印 (%r12,%rbx,1)