C++代码
//本题只用scanf和printf可以做出来,但有两个小坑
#include<bits/stdc++.h>
using namespace std;
long long s,t;
//第一个坑,要开long long,因为数据有点大,int可能会爆0
double ans;
int main()
{
scanf("%lld%lld",&t,&s);
ans=t*s*1.0/12;
//这道题第二个坑,乘1.0来保存小数点后的数
printf("%.3lf",ans);
return 0;
}
使用int也可以,先除12.0再成s就好了
靠谱
先乘s在除12.0为啥是错的呢
请问 不乘1.0 直接除以12.0可以吗
可以的
哥,为啥要除以12.0 呀 不能直接除以12吗
因为t和s定义的是整型
为什么这里强制类型转换不行呢?就是(float)S * (float)T / 12,这么算结果还是报错。
因为c++中浮点数默认类型为double,加上“f”后缀可以强制指定为float。也就是说题解中的”t s 1.0 / 12”通过隐式转化将结果上升为了double类型,你这里使用了强制类型转化将s和t转化为float类型,我试了一下,可能是因为float的精度比double低的原因,最后的四舍五入的结果有点出入,换成(double)S * (doublej)T / 12应该就可以ac了
请问 ans 为什么 要定义为 double , 定义为 long long 就有问题呢?
longlong是整型的
(“%||d%||d”,&t,&s); 没有”||”也一样的
为什么我试了不行啊哥
强制类型转换做法也ac了,输入依旧是int类型两个整数S、T;然后double 两个变量用来存储强制类型转换后的S、T
避坑啦谢谢楼主
scanf(“%lld%lld”,&t,&s);才对吧
恩,谢谢