昨天一个小伙伴问了我个看上起很简单的找钱问题…因为他写的是C模式,输入输出看起来别扭所以我又做了一下…
代码如下
#include <iostream>
using namespace std;
int main()
{
double money;
cin>>money; //cin>>可以输入任何类型的数据,这比C中的scanf好用。
int n001=0;int n005=0;//分
int n01=0;//角
int n1=0,n2=0,n5=0,n10=0,n50=0,n100=0;//元
n100=money/100;
cout<<"n100:"<<n100<<endl;//cout<<是c++中的输出,可以输出任何类型 cout<<endl表示切换到下一行
money=money-100*n100;
cout<<"余额"<<money<<endl<<endl;
n50=money/50;
cout<<"n50:"<<n50<<endl;
money=money-50*n50;
cout<<"余额"<<money<<endl<<endl;
n10=money/10;
cout<<"n10:"<<n10<<endl;
money=money-10*n10;
cout<<"余额"<<money<<endl<<endl;
n5=money/5;
cout<<"n5:"<<n5<<endl;
money=money-5*n5;
cout<<"余额"<<money<<endl<<endl;
n2=money/2;
cout<<"n2:"<<n2<<endl;
money=money-2*n2;
cout<<"余额"<<money<<endl<<endl;
n1=money/1;
cout<<"n1:"<<n1<<endl;
money=money-n1;
cout<<"余额"<<money<<endl<<endl;
n01=money/0.1;
cout<<"n01:"<<n01<<endl;
money=money-0.1*n01;
cout<<"余额"<<money<<endl<<endl;
n005=money/0.05;
cout<<"n005:"<<n005<<endl;
money=money-0.05*n005;
cout<<"余额"<<money<<endl<<endl;
n001=money/0.01;
cout<<"n001:"<<n001<<endl;
money=money-0.01*n001;
cout<<"余额"<<money<<endl<<endl;
return 0;
}
输出如下:
221.5
n100:2
余额21.5
n50:0
余额21.5
n10:2
余额1.5
n5:0
余额1.5
n2:0
余额1.5
n1:1
余额0.5
n01:4
余额0.1
n005:1
余额0.05
n001:4
余额0.01
这里出现一个问题
0.5/0.1竟然等于4
现在我把这个问题单独提取出来
#include <iostream>
using namespace std;
int main()
{
double a=0.5;
int n=a/0.1;
cout<<n<<endl;
return 0;
}
输出:
4
Process returned 0 (0x0) execution time : 0.472 s
Press any key to continue.
但是把int n改成double n结果确实正确的
#include <iostream>
using namespace std;
int main()
{
double a=0.5;
double n=a/0.1;
cout<<n<<endl;
return 0;
}
输出:
5
Process returned 0 (0x0) execution time : 0.361 s
Press any key to continue.
我觉得这个问题可以这样浅显且非正规的解释成:
int n=0.5/0.1;
此时0.5/0.5=4.9999999
然后int(4.9999999)
就是4。