一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式:
输入第一行给出一个不超过50位的整数N
。
输出格式:
在一行中输出N
犯二的程度,保留小数点后两位。
输入样例:
-13142223336
输出样例:
81.82%
思路:
因为负数带符号所以我们输入一串字符串,先判断倍数
奇偶判断(b1):我们字符串最后一个数如果%2==0则为偶数
正负判断(b2):我们字符串第一个元素如果等于'-'则为负数
输出的时候我们要*数的个数
如果b2=1则为整数直接成字符串长度len
否则×len-1(因为求len的时候把‘-’也带上了)
参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
char n[55];
scanf("%s",n);
int count =0;//2的个数
int len=strlen(n);//总个数
double b1=1.0;//倍数
double b2=1.0;
//倍数
if((n[len-1]-'0')%2==0)
b1=2.0;
if(n[0]=='-')
b2=1.5;
//统计2的个数
for(int i=0;i<=len;i++)
{
if(n[i]=='2')
count++;
}
if(b2==1.0)
printf("%.2lf%%",1.0*count/len*b1*b2*100);
else
printf("%.2lf%%",1.0*count/(len-1)*b1*b2*100);
return 0;
}