乔治爱啃脚趾 发表于 2023-11-19 15:47:40

求助

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

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

输出格式:
在一行中输出N犯二的程度,保留小数点后两位。
以下是我写的代码,麻烦帮忙看看哪里有问题
#include <stdio.h>
#include<string.h>
int main()
{
        char a;
        double x=0,y,count=0;
        int i;
        gets(a);
        for(i=0;a!='\0';i++)
        {
                if(a=='2'){
                        count++;
                }
        }
        if((a-48)%2==0)
        {
                x+=2.0;
        }
        if(a=='-')
        {
                x+=0.5;
                y=(count/(double)(i-1.0))*x*2.0*0.01;
        }
        else
        {
                y=(count/(double)i)*x*2.0*0.01;
        }
        printf("%.2lf",y);
}

isdkz 发表于 2023-11-19 15:47:53

#include <stdio.h>
#include <string.h>
int main()
{
    char a;// 修改数组长度为51,以容纳最长的50位整数和字符串结尾的'\0'
    double x = 0, y, count = 0;
    int i;
    gets(a);
    for (i = 0; a[ i] != '\0'; i++)
    {
      if (a[ i] == '2')
      {
            count++;
      }
    }
    if ((a - 48) % 2 == 0)// 修改为a - '0'以获取最后一位数字
    {
      x += 2.0;
    }
    if (a == '-')
    {
      x += 0.5;
      y = (count / (double)(i - 1.0)) * x * 2.0 * 0.01;
    }
    else
    {
      y = (count / (double)i) * x * 2.0 * 0.01;
    }
    printf("%.2lf", y);
}


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

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

以上是修改后的代码,应该可以正确计算给定整数的犯二程度并输出结果。

Mike_python小 发表于 2023-11-19 15:48:16

timeout of 2000ms exceeded
页: [1]
查看完整版本: 求助