鱼C论坛

 找回密码
 立即注册
查看: 1029|回复: 7

大数相乘

[复制链接]
发表于 2023-5-9 22:05:47 | 显示全部楼层 |阅读模式
7鱼币
  1. #include<stdio.h>
  2. #include<math.h>

  3. int main()
  4. {
  5.         double a,b,c,d,e,f;
  6.         scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f);

  7.        
  8.         if(a/d*b/e*c/f<=1.000001)
  9.         {
  10.                 printf("0");
  11.         }
  12.        
  13.         else if(a/d*b/e*c/f>1)
  14.         {
  15.                 printf("1");
  16.         }
  17.        
  18.         else if(a/d*b/e*c/f<1)
  19.         {
  20.                 printf("-1");
  21.         }
  22.        
  23.        
  24.         return 0;
  25. }
复制代码

题目

题目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-9 22:06:10 | 显示全部楼层
这段代码实现的是判断三个大数相乘的结果是否大于、小于或等于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可以避免精度误差导致的错误输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-9 22:06:35 | 显示全部楼层
下方是题目描述 上方是我的代码 请问代码出错地方在哪儿 评判是wa 应该如何修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-9 22:17:45 | 显示全部楼层
你的问题就是第一个 if 条件涵盖了最后一个 , 你想想看
<= 1.00001 是不是包含 < 1
所以应该输出小于的时候你会输出等于 , 所以出错了
这里给出我的代码 , 要加 math.h 头文件
  1. #include <stdio.h>
  2. #include <math.h>

  3. double a, b, c, d, e, f;

  4. int main(){
  5.     scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &e, &f);

  6.     if(fabs(a/d*b/e*c/f - 1) <= 1e-5){
  7.         // 这里会因为精度问题变成1.0...01这种, 这时我们就认为是相等
  8.         // fabs( x ) 是给 x 取绝对值
  9.         // 这里就看它跟 1 相差是不是很小
  10.         printf("0");
  11.     }
  12.     else if(a/d*b/e*c/f > 1){
  13.         printf("1");
  14.     }
  15.     else{
  16.         // 所有情况剩下就是小于了
  17.         printf("-1");
  18.     }

  19.     return 0;
  20. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-9 22:19:46 | 显示全部楼层
if(a/d*b/e*c/f<=1.000001)这句怎么是<=?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-9 22:21:49 | 显示全部楼层
大概改成==就可以吧。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-9 22:25:33 | 显示全部楼层
此代码不一定错,但若是针对这道题来说有需改正之处。

根据题目描述,“输入一行六个非负整数表示 ABCDEF, 六个数均不超过 10^7。”

然而在该代码中,使用了 scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f) 以读取六个 double 类型的浮点数,而非题目描述中所需求解的六个 int 类型的整数(或者 long long 类型)。因此,需替换为对应的 %d 或 %lld。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-10 09:18:48 | 显示全部楼层
太帅了,兄弟,在这里找到了答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 18:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表