代码特性
查看原帖
代码特性
1220160
AT_T_Tdy楼主2025/8/29 17:14

在函数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

2025/8/29 17:14
加载中...