均分数字题解

均分数字

描述
你手上现在有1到5这5个整数 每种整数,你有无限个 现在希望你拿出尽可能少的数字个数 使这些数字的平均值为实数P

输入
一个实数P,可能有1到9个小数位 1<=P<=5

输出如题

样例
输入
5
输出
1
输入
4.5
输出
2

atoi函数的使用及代码分析

atoi函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 [1] 。特别注意,该函数要求被转换的字符串是按十进制数理解的。atoi输入的字符串对应数字存在大小限制(与int类型大小有关),若其过大可能报错-1。其在开始转换后遇到不是‘0’~‘9’的字符,就会停止转换。
若B为“4.5”那么x=atoi(B)=4,y=atoi(B+2)=5*(从小数点后开始转换)*。
此题可简化为一个小数最少乘几(为整数)可得到一个整数
题目解析
1.当x乘上该小数点位数个十后,加上y,就相当于去掉小数点的数。
2.接下来可以统计该数字质因数中有多少2和5,具体见代码

完整代码如下

#include <bits/stdc++.h>
using namespace std;
typedef long long l;
l c(l a,l b){
	l ans=0;
	while(!a%b)ans++,a/=b;
	return ans;
}
l n2,n5,ans,n=1,x,y;
int main(){
	char B[50];
	scanf("%s",B);
	x=atoi(B),y=atoi(B+2);
	for(int i=1;i<=strlen(B+2);i++)x*=10;
	x+=y;
	n2=c(x,2),n5=c(x,5);
	while(n2<strlen(B+2))n*=2,n2++;
	while(n5<strlen(B+2))n*=5,n5++;
	cout<<n;
	return 0;
}

本文结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值