7-2 到底有多二
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式:
输入第一行给出一个不超过50位的整数N
。
输出格式:
在一行中输出N
犯二的程度,保留小数点后两位。
输入样例:
-13142223336
输出样例:
81.82%
char [ ] :
#include <bits/stdc++.h>
//2019/07/18
using namespace std;
int main()
{
char number[55]; //数字太长,用字符数组生成字符串
int i,length,conter=0;
float n=100;
scanf("%s",number);
length=strlen(number);
//printf("length=%d\n",length);
if((number[length-1]-'0')%2==0) //需要判断是否能被2整除,字符-'0'可得到整数值
n*=2; //string类型也可,需要取出每个字符传换成char
for(i=0;i<length;i++)
if(number[i]=='2')
conter++;
if(number[0]=='-') //length-字符串长度,记录数字个数,有负号长度减一
{ //因为会改变字符串长度,所以最后判断--!!!
n*=1.5;
length--;
}
//printf("n=%f conter=%d length=%d\n",n,conter,length);
n*=(1.0*conter/length);
printf("%.2f%%",n);
return 0;
}
string : (string 取某个字符:at() 函数、[ i ]、迭代器)
#include <bits/stdc++.h>
//2019/07/18
using namespace std;
int main()
{
string number;
int conter=0,len;
float n=100;
char op;
getline(cin,number);
len=number.length();
string::iterator ite;
ite=number.begin();
for(; ite!=number.end();ite++)
{
op=*ite; //迭代器获取字符
//printf("%c\n",op);
if(op=='2')
conter++;
}
op=number.at(len-1); //at()函数获取字符
//printf("endchar=%c\n",op);
if((op-'0')%2==0)
n*=2;
if(number[0]=='-') //[ ] 获取字符
{
n*=1.5;
len--;
}
n*=(1.0*conter/len); //c++保留两位小数的方法
cout<<setiosflags(ios::fixed)<<setprecision(2)<<n<<"%";
return 0;
}