只想说y总代码太简洁了,惊到我了
求数n!里面有多少个p,
公式:res=n/p+n/(pp)+n/(pp*p)+......表示不理解,记住算了
求一个十进制的数后面有多少个0就是看其中有多少个因子10,所以求二进制的数后面跟了多少个0,就是看其中有多少个因子2
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int res;
int f(int n,int p){
res=0;
while(n){
res+=n/p;
n/=p;
}
return res;
}
int main()
{
while(scanf("%d%d",&n,&m),n||m){
cout<<f(n,2)-f(n-m,2)<<endl;
}
return 0;//return 0 一定写在循环外面,不然循环就会中断
}
自己思路笨拙的写一下吧
注意是看里面有多少个因子2,只有对mod 2为0,表示能整除2,整除不完就直接break,不然/2之后的数可能还有因子2会有影响
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int res;
int main()
{
while(scanf("%d%d",&n,&m),n||m){
res=0;
for(int i=n;i>=n-m+1;i--)
{ int t=i;
while(t){
if(t%2==0)res++;
else break;
t/=2;
}
}
cout<<res<<endl;
}
return 0;//return 0 一定写在循环外面,不然循环就会中断
}