均分数字
描述
你手上现在有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;
}
本文结束