鱼C论坛

 找回密码
 立即注册
查看: 618|回复: 2

求助

[复制链接]
发表于 2023-11-19 15:47:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。

输入格式:
输入第一行给出一个不超过50位的整数N。

输出格式:
在一行中输出N犯二的程度,保留小数点后两位。
以下是我写的代码,麻烦帮忙看看哪里有问题
  1. #include <stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.         char a[50];
  6.         double x=0,y,count=0;
  7.         int i;
  8.         gets(a);
  9.         for(i=0;a[i]!='\0';i++)
  10.         {
  11.                 if(a[i]=='2'){
  12.                         count++;
  13.                 }
  14.         }
  15.         if((a[i-1]-48)%2==0)
  16.         {
  17.                 x+=2.0;
  18.         }
  19.         if(a[0]=='-')
  20.         {
  21.                 x+=0.5;
  22.                 y=(count/(double)(i-1.0))*x*2.0*0.01;
  23.         }
  24.         else
  25.         {
  26.                 y=(count/(double)i)*x*2.0*0.01;
  27.         }
  28.         printf("%.2lf",y);
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 15:47:53 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char a[51];  // 修改数组长度为51,以容纳最长的50位整数和字符串结尾的'\0'
  6.     double x = 0, y, count = 0;
  7.     int i;
  8.     gets(a);
  9.     for (i = 0; a[ i] != '\0'; i++)
  10.     {
  11.         if (a[ i] == '2')
  12.         {
  13.             count++;
  14.         }
  15.     }
  16.     if ((a[i - 1] - 48) % 2 == 0)  // 修改为a[i - 1] - '0'以获取最后一位数字
  17.     {
  18.         x += 2.0;
  19.     }
  20.     if (a[0] == '-')
  21.     {
  22.         x += 0.5;
  23.         y = (count / (double)(i - 1.0)) * x * 2.0 * 0.01;
  24.     }
  25.     else
  26.     {
  27.         y = (count / (double)i) * x * 2.0 * 0.01;
  28.     }
  29.     printf("%.2lf", y);
  30. }
复制代码


在您的代码中,有几个问题需要修复:

1. 由于输入的整数可能是50位,因此需要将数组长度增加到51,以便容纳最长的整数和字符串结尾的'\0'。
2. 在计算最后一位数字时,应该使用 a[i - 1] - '0' 而不是 a[i - 1] - 48 。
3. 在计算犯二程度时,应该使用 (count / (double)i) 而不是 (count / (double)(i - 1.0)) ,因为 (i - 1.0) 实际上是数组中的'\0'的位置,而不是整数的位数。

以上是修改后的代码,应该可以正确计算给定整数的犯二程度并输出结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 15:48:16 | 显示全部楼层
timeout of 2000ms exceeded
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 10:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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