大数相乘
#include<stdio.h>#include<math.h>
int main()
{
double a,b,c,d,e,f;
scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f);
if(a/d*b/e*c/f<=1.000001)
{
printf("0");
}
else if(a/d*b/e*c/f>1)
{
printf("1");
}
else if(a/d*b/e*c/f<1)
{
printf("-1");
}
return 0;
} 这段代码实现的是判断三个大数相乘的结果是否大于、小于或等于1,并输出相应的结果。其中输入的六个数分别是a、b、c、d、e、f。
具体实现是通过将a/d*b/e*c/f与1进行比较,如果小于等于1.000001,则输出0;如果大于1,则输出1;如果小于1,则输出-1。
需要注意的是,这里使用了double类型来存储输入的数,因为这些数可能非常大,超过了int或long类型的范围。同时,由于浮点数的精度问题,判断是否小于等于1.000001而不是1可以避免精度误差导致的错误输出。 下方是题目描述 上方是我的代码 请问代码出错地方在哪儿 评判是wa 应该如何修改 你的问题就是第一个 if 条件涵盖了最后一个 , 你想想看
<= 1.00001 是不是包含 < 1
所以应该输出小于的时候你会输出等于 , 所以出错了
这里给出我的代码 , 要加 math.h 头文件
#include <stdio.h>
#include <math.h>
double a, b, c, d, e, f;
int main(){
scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &e, &f);
if(fabs(a/d*b/e*c/f - 1) <= 1e-5){
// 这里会因为精度问题变成1.0...01这种, 这时我们就认为是相等
// fabs( x ) 是给 x 取绝对值
// 这里就看它跟 1 相差是不是很小
printf("0");
}
else if(a/d*b/e*c/f > 1){
printf("1");
}
else{
// 所有情况剩下就是小于了
printf("-1");
}
return 0;
} if(a/d*b/e*c/f<=1.000001)这句怎么是<=?
大概改成==就可以吧。。。 此代码不一定错,但若是针对这道题来说有需改正之处。
根据题目描述,“输入一行六个非负整数表示 ABCDEF, 六个数均不超过 10^7。”
然而在该代码中,使用了 scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f) 以读取六个 double 类型的浮点数,而非题目描述中所需求解的六个 int 类型的整数(或者 long long 类型)。因此,需替换为对应的 %d 或 %lld。 太帅了,兄弟,在这里找到了答案。
页:
[1]