L1-017 到底有多二(模拟)
一个整数 “犯二的程度” 定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字 -13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:$3/11×1.5×2×100%$ ,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式:
输入第一行给出一个不超过50位的整数 N
。
输出格式:
在一行中输出 N
犯二的程度,保留小数点后两位。
输入样例:
输出样例:
思路:
用string处理,第一位判断是否为负数,最后一位判断是否位偶数,用map统计2出现的次数。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <bits/stdc++.h> using namespace std;
double t = 1, sum, len; string N; map<char, double> m;
int main() { cin >> N; len = N.length(); for(int i = 0; i < N.length(); i++) { if(N[i] == '-') { t = t * 1.5; len--; } if(i == N.length()-1 && (N[i]-'0') % 2 == 0) t = t * 2; m[N[i]]++; } cout << fixed << setprecision(2) << t * m['2'] / len * 100 << "%"; return 0; }
|