郑州做网站齿轮,最安全的软件下载网站,商标查询网入口,哪里有网站建设的企业一个整数“犯二的程度”定义为该数字中包含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%
第一次的做法用long long存储N
1、错因long long类型可以存储的最大数字范围为-9223372036854775808到9223372036854775807即它可以存储19位数字无法存储20位及以上的数字。
2、求位数的方法while(m!0){ mm/10;len;}
3、求个位的方法tm%10;
4、去负号/求绝对值的方法mabs(n);
5、保留几位小数的方法coutfixedsetprecision(2)sum;
#includeiostream
#includeiomanip
using namespace std;
int main(){long long n,m;cinn;float a1;float b1;if(n0) a1.5; //若为负数乘1.5if(m%20) b2;int len0; //n的位数int er0; //n中2的个数int t;mabs(n);while(m0){len; //求长度tm%10; if(t2){er;}//求2的个数mm/10;}float sum0;sum(er*a*b*100)/len;coutfixedsetprecision(2)sum%;
} 测试结果当输入位数大于19位时总会输出一样的数如图 第二次做法用string存储N的每位数
判断偶数的方法s[len-1]-0和2取余为0 易错点当N为负数时最终位数len要减1
#includeiostream
#includeiomanip
using namespace std;
int main(){string s;getline(cin,s); //存储Nfloat a1.0;float b1;int er0; //er记录n中2的个数int lens.size(); //len为N的位数负数要-1for(int i0;ilen;i){if(s[i]2) er; //求N中2的个数}float sum0;int ts[len-1]-0;if(t%20) b2; //如果N为偶数if(s[0]-) {a1.5;len--;}//如果为负数sum(er*a*b*100)/len;coutfixedsetprecision(2)sum%;
}