问题描述:20!的二进制表示中从最低位数起,最长有多少个连续的0。
题目分析:如果我们先算出20!转换二进制表示,在数最长的连续0,那么这肯定是低效的。
我们可以通过数论中的算术基本定理解决;
算术基本定理:整数a可以素因子分解:a=p1r1 p2r2 …pnrn
举个荔枝:99 099=32 ×7×112×13
那么20!能分解出多少个2,2的个数就是本题答案
#include<stdio.h> int main(){ int a=1,cnt=0; while(a<=20){ int b=a; while(b!=0&&b%2==0){ cnt++; b=b/2; } a++; } printf("%d",cnt); }
顺便安利一波十进制数转n进制代码
String str=""; for(int i=100;i!=0;i/=2){ //100的二进制 str=(i%2)+str; }