7-2 到底有多二
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入第一行给出一个不超过50位的整数N。
在一行中输出N犯二的程度,保留小数点后两位。
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; }