一个奇怪的现象

Benny1 2003-10-10 02:03:45
#include<iostream>
using namespace std;

void main()
{
double a[2];
int j,m;
double mianzhi[]={100.00,50.00,20.00,10.00,5.00,2.0,1.00,0.50,0.10,0.05,0.02,0.01};
cout<<"Please enter the 10 people's salary!"<<endl;
for(int i=0;i<1;i++)
{
cin>>a[i];
}
a[1]=0.0;
int i=0;
while(a[i]!=0.00)
{
j=0;
cout<<"第"<<i+1<<"个人的钱分配如下!"<<endl;
while(a[i]!=0.00&&j<12)
{

if(a[i]>=mianzhi[j])
{
m=(int)(a[i]/mianzhi[j]);
// cout<<m<<endl;
cout<<"需要"<<mianzhi[j]<<"元面值的钱"<<m<<"张。"<<endl;
a[i]-=m*mianzhi[j];
cout<<"a[i] :"<<a[i]<<endl;
}
j++;
}
cout<<endl;
i++;
}
}
/*输入63.9,我希望是输出50,10,2,1,0.5,4个0.1
可为什么输出为50,10,2,1,0.5,3个0.1....
不明白,还有a[0],明明是0了,可为什么是......????
希望高手能帮我解决
本来是输入10个人的,先输入一个试试.*/
...全文
83 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy84920 2003-10-11
  • 打赏
  • 举报
回复
又来了,这也叫奇怪的问题.

原来是自己不小心走错了路! :)
Benny1 2003-10-11
  • 打赏
  • 举报
回复
谢谢楼上的几位!:)
liao2001 2003-10-10
  • 打赏
  • 举报
回复
楼上的星星,多此一举。。。
point_to 2003-10-10
  • 打赏
  • 举报
回复
#include <math.h>
using namespace std;
void main()
{
double a[2];
int j;
int m;
double mianzhi[]={100.00,50.00,20.00,10.00,5.00,2.0,1.00,0.50,0.10,0.05,0.02,0.01};
cout<<"Please enter the 10 people's salary!"<<endl;
for(int i=0;i<1;i++)
{
cin>>a[i];
}
a[1]=0.0;
i=0;
while(fabs(a[i])>0.001)//
{
j=0;
cout<<"第"<<i+1<<"个人的钱分配如下!"<<endl;
while(fabs(a[i])>0.001 && j<12)
{

if(a[i]>=mianzhi[j])
{

double temp=a[i]/mianzhi[j];
m=static_cast<int>(temp+0.0001);//
cout<<"需要"<<mianzhi[j]<<"元面值的钱"<<m<<"张。"<<endl;
a[i]-=m*mianzhi[j];

if(fabs(a[i])>0.001 )
cout<<"a["<<i<<"] 剩下:"<<a[i]<<endl;
}
j++;
}
cout<<endl;
i++;
}


}
liao2001 2003-10-10
  • 打赏
  • 举报
回复
扫了一眼,数据丢不丢失先不管,且看:
double a[2];

while(a[i]!=0.00)
while(a[i]!=0.00&&j<12)
if(a[i]>=mianzhi[j])
leyt 2003-10-10
  • 打赏
  • 举报
回复
问题在这 m=(int)(a[i]/mianzhi[j]);
daizh 2003-10-10
  • 打赏
  • 举报
回复
m=(int)(a[i]/mianzhi[j]);//这个问题应该是你将double强行转换为int型时数据丢失造成的。
Oliver2002 2003-10-10
  • 打赏
  • 举报
回复
属于双精度浮点数处理上的问题,例如:
63.9-50.00*1=13.899999999999999
这是我机子上面的执行结果,按照这样的话,当分为50,10,2,1,0.5,之后
剩下的值就不为0.4,而比0.4可能小一些,所以只能分3个0.1了
chinajiji 2003-10-10
  • 打赏
  • 举报
回复
const double PRECISION = iE-6;
while(a[i] > -PRECISION && a[i] < PRECISION)
...
cxjddd 2003-10-10
  • 打赏
  • 举报
回复
浮点数是有些问题。还是先化成整型再算吧。
point_to 2003-10-10
  • 打赏
  • 举报
回复
楼上的多细胞,你在说哪里??

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧