7-1 到底有多二

7-1 到底有多二(15 分)

一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。

输入格式:

输入第一行给出一个不超过50位的整数N

输出格式:

在一行中输出N犯二的程度,保留小数点后两位。

输入样例:

-13142223336

输出样例:

81.82%

 这确实是一道水题,然而由于我眼高手低,再加上后来时间不够,才没有真正理解这道题目的意思,说白了这道题我还是没有做出来,绝望到怀疑人生,不过现在重振旗鼓,继续看题。首先,要注意的第一点:是负数加0.5倍,是偶数加1倍,是乘法,不是加法,在做题的过程中,无论我再怎么运行,我的结果都是正确的,然而我的结果正确只是针对题目给的这一个例子,我把乘法写成了加法,小学数学没学好;第二点:N是一个不超过50位的整数,用long long是不可以的,long long的整数范围要比50小(参考网址 http://blog.csdn.net/mafuli007/article/details/7325510);第三点:采用字符串数组存放的时候,当是负数时,负号会占用一位,因此当是负数时,要把len-1;

#include 
#include 
#include 
#include 
using namespace std; 
int main()
{ 
   string s; 
   int len,j,m=0; 
   double i=1.0; 
   cin>>s; 
   if(s[0]=='-') 
   i=i*1.5; 
   len=s.size(); 
   // cout< 
#include
#include 
#include 
using namespace std; 
int m=0,n=0; 
void p(long long N)
{ 
   int s; 
   while(N)
   { 
      s=N%10; 
	  if(s==2)
	  { 
	    m=m+1; 
	  } 
	    n++; 
		N=N/10; 
	} 
} 
int main()
{ 
   long long N; 
   double i=1.0; 
    cin>>N; 
	if(N<0) 
	 i=i*1.5; 
	if(N%2==0) 
	  i=i*2; 
    if(N<0) 
	  p(-N); 
	else p(N); 
	// cout<

 

你可能感兴趣的:(CCCC天梯赛)