L1-017 到底有多二

问题:

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

解答:

#include <stdio.h>
int main(){
	int num,digits=0,zf=0,n=0,ws,i;
	//digits是位数 zf是正负 n是2的个数 ws是尾数 
	double s1,fin;
	char a[100];
	
	//输入数组并记录位数 
	while((a[digits]=getchar())!='\n'){
		ws = a[digits]-'0';
		digits += 1;
}
	//看有多少个2
	for(i=0;i<digits;i++) 
		if(a[i]=='2')
			n++;
	//看是不是负数 
	if (a[0]=='-'){
		digits -= 1;
		zf = 1;
	}
	
	//计算包含2的个数与其位数的比值
	s1 = (double)n/digits;
	//偶数或者负数

	if(ws%2==0)
		s1 = s1*2.0;
	if(zf==1)
		s1 = s1*1.5;
	fin = s1*100;
		
	//输出结果
	printf("%.2lf%%",fin);		
} 

#用while循环输入方便记录位数

解答过程中的错误:

1.将a[i]==2,字符数组里的是字符2而非数值2

2.digits的调用顺序不能轻易改变,先得到尾数和遍历求2的数量后,再变换为真正的位数

3整数和整数相除得到的结果还是整数,要得到小数需要进行强制类型转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值