小问题,有关C++的乘法计算,快者加分!

来源:百度知道 编辑:UC知道 时间:2024/06/25 03:28:09
对于一个整数m(大于100)
m=m*1.2;
和m=m*6/5结果居然不同?
为什么?
下面是例子
注意
*6/5是正确答案
而*1.2与之差一
m都是int,请教差别

http://www.rqnoj.cn/Problem_Show.asp?PID=24(上面是关于例子的说明,这是解决此网页上的问题的程序)
#include<iostream>
using namespace std;
int a[13],s=0,i;
int m=0;
int main()
{for(i=1;i<=12;++i)
cin>>a[i];
for(i=1;i<=12;i++)
{s+=300;
if(s>=a[i]) {s-=a[i];m+=s/100*100;s%=100;}
else {cout<<"-"<<i;return 0;}
}
m=m*6/5;
s=s+m;
cout<<s;
return 0;}
输入12个值后(均>100)
有时候会差1

int型6/5直接取整数1,用float型才行
#include<iostream>
using namespace std;
int a[13],s=0,i;
float m=0;
int main()
{for(i=1;i<=12;++i)
cin>>a[i];
for(i=1;i<=12;i++)
{s+=300;
if(s>=a[i]) {s-=a[i];m+=s/100*100;s%=100;}
else {cout<<"-"<<i;return 0;}
}
m=m*6/5;
s=s+m;
cout<<s;
return 0;}
改一下m的类型就OK了

m的类型决定了答案,一定是因为m是int定义的!

因为在执行m=m*1.2的时候。会转换成double形式。

所以有区别。

而且你的程序很乱。
不知道你的目的是什么。

因为
m*6 % 5 != 0

你是不是用float声明的M?????????