大佬勿喷,适用新手
功能
求一个十进制数的位数
代码
int n=1234; //求n的位数
int s=1,len=0;
while(s<=n){
s*=10;
len++;
}
cout<<len<<endl;
拓展功能
将a=1,2,3,4,5,32,33,34,64一一对应转化
为b=0,1,1,2,2,5,5,5,6(即2^n不大于a,b为最大的n)
代码
int a[9]={1,2,3,4,5,32,33,34,64},b[10];
for(int i=0;i<9;i++){
int s=1,len=-1;
while(s<=a[i]){
s*=2;
len++;
}
b[i]=len;
cout<<b[i]<<" ";
}
优点
除了直接打表(打表缺点很明显,数组下标最大不能超过5*10^8),这个方法时间复杂度几乎是最小(log (2) n)
该方法很适合做暴力题,想一下开始时简洁地处理数据,会极大保留心态,每一次超常发挥都是从秒杀暴力题开始的!!!