求助
一个整数“犯二的程度”定义为该数字中包含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);
} #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'的位置,而不是整数的位数。
以上是修改后的代码,应该可以正确计算给定整数的犯二程度并输出结果。 timeout of 2000ms exceeded
页:
[1]