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<stdio.h> 
#include<iostream> 
#include<algorithm> 
#include<string> 
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<<len<<endl; 
   if((s[len-1]-48)%2==0) 
     i=i*2; 
   for(j=0;j<len;j++)
   { 
     if(s[j]=='2')
	 { 
	    m++; 
	 } 
   } 
     if(s[0]=='-') 
	 len--; 
	 //cout<<m<<endl; 
	 double w=(double)((double)m/len)*i*100;
	  printf("%.2lf%%\n",w); 
	  return 0; 
} 
/*错误代码: long long范围不够 */ 
/*
#include<stdio.h> 
#include<iostream>
#include<algorithm> 
#include<string> 
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<<m<<" "<<n<<endl; 
	// cout<<i<<" "<<endl; 
  double w=(double)((double)m/(double)n)*i*100; 
  printf("%.2lf",w); 
  cout<<"%"<<endl; 
  return 0; 
  }
  */

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\],一个整数的"犯程度"定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如,对于数字-13142223336,它是一个11位数,其中有3个2,并且是负数,也是偶数。因此,它的犯程度计算为:3/11×1.5×2×100%,约为81.82%。 根据引用\[3\]中的AC代码,我们可以通过以下步骤计算一个给定整数的犯程度: 1. 统计数字中2的个数。 2. 判断数字是否为偶数,如果是,则犯程度翻倍。 3. 判断数字是否为负数,如果是,则犯程度再增加1.5倍。 4. 计算2的个数与数字位数的比值,得到犯程度。 5. 将犯程度转换成百分形式输出。 因此,对于题目"L1-017 到底有多",我们可以使用上述步骤来计算给定整数的犯程度。 #### 引用[.reference_title] - *1* [L1-017 到底有多 (15 分)](https://blog.csdn.net/qq_45090427/article/details/114661562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【GPLT】L1-017 到底有多](https://blog.csdn.net/weixin_42449444/article/details/88641888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值