L1-017 到底有多二 (15 分)天梯赛
Posted ~晚风微凉~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L1-017 到底有多二 (15 分)天梯赛相关的知识,希望对你有一定的参考价值。
L1-017 到底有多二 (15 分)
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式:
输入第一行给出一个不超过50位的整数N
。
输出格式:
在一行中输出N
犯二的程度,保留小数点后两位。
输入样例:
-13142223336
结尾无空行
输出样例:
81.82%
结尾无空行
鸣谢安阳师范学院段晓云老师和软件工程五班李富龙同学补充测试数据!
一年前写的,没有发现是大整数
#include<bits/stdc++.h>
using namespace std;
int main()
long long int n;
scanf("%lld",&n);
if(n==0)
printf("0.00%%");
return 0;
double num=0,sign1=100,i=0,sign2=99;
if(n<0)sign1=-1;//奇数,增加0.5倍
if(n%2==0)sign2=-2;//偶数翻倍
n=abs(n);
while(n)
if(n%10==2)num++;
n=n/10;
i++;
double end=0;
end=double(num)/double(i)*100;
if(sign1==-1)end=end*1.5;
if(sign2==-2)end=end*2;
//if((sign1==-1)&&(sign2==-2))end=end*1.5*2;
printf("%.2lf%\\n",end);
return 0;
一年前的的代码,看起来有点凌乱。
问题:
1,没有考虑大整数
2,没有考虑正数第一位也是2
下面的代码,样例全过
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int sign2,j;
double sign1;
ll sum,sum1;
int main()
string s;
cin>>s;
sign1=1.0;sign2=1;sum=0;sum1=0;j=0;
char tmp;
tmp=s[0];
if(tmp=='-')sign1=1.5;sum1=-1;
if(tmp=='2')sum++;
while(tmp!='\\0')
j++;
tmp=s[j];
if(tmp=='2')sum++;
sum1++;
int dd;
dd=s[j-1]-'0';
// cout<<dd;
if(dd%2==0)//偶数
sign2=2;
//printf("%d %d ",sum,sum1);
double end;
end=double(sum)/double(sum1)*100;
//cout<<end<<endl;
end*=sign1*sign2;
printf("%.2lf%%",end);
return 0;
以上是关于L1-017 到底有多二 (15 分)天梯赛的主要内容,如果未能解决你的问题,请参考以下文章