广东网站开发公司,Wordpress教程Windows,有了域名搭建网站详细步骤,网店装修教程题目
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数#xff0c;则程度增加0.5倍#xff1b;如果还是个偶数#xff0c;则再增加1倍。例如数字-13142223336是个11位数#xff0c;其中有3个2#xff0c;并且是负数#xff0c;也是偶数…题目
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数则程度增加0.5倍如果还是个偶数则再增加1倍。例如数字-13142223336是个11位数其中有3个2并且是负数也是偶数则它的犯二程度计算为3/11×1.5×2×100%约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式
输入第一行给出一个不超过50位的整数N。
输出格式
在一行中输出N犯二的程度保留小数点后两位。
输入样例
-13142223336输出样例
81.82% 思路
录入数字为字符串遍历字符串求2的个数分负数和正数情况讨论负数要 * 1.5正数要 * 1 注意是否乘偶数系数与正负无关可能是题目没表述清楚。 知识点
精确到小数点后2位用如下代码
coutfixedsetprecision(2)result%; 涉及到的知识点可以参考c保留n位小数输出(百分数形式,保留n位有效数字,设置宽度)_小白yaa的博客-CSDN博客
代码
#include iostream
#include string
#include iomanip
using namespace std;//是否乘偶数系数与正负无关可能是题目没表述清楚int oushu(string n) {int m n[n.length() - 1] - 0;//注意此处要-1才是最后一位m 为个位if (m % 2 0)//一个数的最后一位即个位能被2整除那么这个数就是偶数。{return 2;} else{return 1;}
}int main() {string n;//输入的数字用字符串存储cin n;int k 0;//数字中包含2的个数double result 1.0;int len n.length();//字符串的长度//统计数字中2的个数for (int i 0; i len; i){if (n[i] 2){k;}}//首先分为两个大的情况负数和非负数 然后分别讨论各个情况下是否为偶数的情况 用oushu()函数进行了封装提高代码的复用性if (n[0]-){result (double)k / (len - 1)*1.5*oushu(n);} else{result (double)k / len * oushu(n);}cout setiosflags(ios::fixed) setprecision(2) result*100 % endl;return 0;
}