一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式:
输入第一行给出一个不超过50位的整数N
。
输出格式:
在一行中输出N
犯二的程度,保留小数点后两位。
输入样例:
-13142223336
输出样例:
81.82%
PS:
- 需要用字符串来存储,不然会越界,无法存储;
- 先判断是否为负数,如果是的话,在利用length()来统计字符串长度时,需要减1位;
- c++使用length()统计字符串长度需要添加头文件#include<string>;
- 通过-'0'来将字符转化成数字,判断是否为数字2;
- 输出百分号需要打两次%.
//到底有多二 //2021/1/26 using namespace std; #include<iostream> #include<string> int main() { string n;//用字符串来记录 cin>>n; float a=1.0; int b=1,i; if(n[0]=='-') { a+=0.5; } if((n[n.length()-1]-'0')%2==0) { b+=1; } int count=0;//统计2的个数 for(i=0;i<n.length();i++) { if(n[i]-'0'==2) { count++; } } float sum = 0; if(a!=1)//是负数 { sum = (count*1.0/(n.length()-1.0))*a*b*100; } else { sum = (count*1.0/n.length())*a*b*100; } printf("%.2f%%",sum);//打出%需要打俩次 return 0; }