在函数fack(4~11行)中 len的长度上限为什么无论是多长的数字都为10啊
#include<bits/stdc++.h>
using namespace std;
const long long inf = 5e8+10;
int fack(int a){ //获取二进制数字位数
int k=0;
while(true){
a/=10;
k++;
if(a==0)return k;
}
}
int twoten(int a){//将二进制转为十进制
int sum=0;
int len=fack(a);
for(int i=0;i<len;i++){
sum+=(a%10)*pow(2,i);
a/=10;
}
return sum;
}
int weight(int n){//计算权值
int ki=0,ans=0;
int a[600000]={};
memset(a,0x7f7f,sizeof(a));
while(n>0){
a[++ki]=n%2;
n/=2;
if(a[ki]!=a[ki-1]){
ans++;
}
}
return ans;
}
int baseans(int l, int r){//范围最小权值
int nb=-1;
int x=twoten(l),y=twoten(r);
int MIN=inf;
for(int i=x;i<=y;i++){
nb=weight(i);
if(nb<MIN){
MIN=nb;
}
}
return MIN;
}
int main(){
int T;
cin>>T;
/*测试*/
// cout<<"twoten:"<<twoten(T)<<endl;
// cout<<"weight:"<<weight(twoten(T))<<endl;
// cout<<"fac:"<<fac(T)<<endl;
while(T>0){
int l,r;
cin>>l>>r;
cout<<baseans(l,r)<<endl;
T--;
}
return 0;
}
对于fack()
in:110110110110
out:10