#include<bits/stdc++.h>
using namespace std;
long long xxx(string x){
int a[10001];
for(int j=0;j<x.size();j++){
a[j]=x[j]-'0';
}
long long l=0;
long long i=x.size();
for(int j=0;j<x.size();j++){
l+=pow(2,i-j-1)*a[j];
}
return l;
}
int main(){
int n;
cin>>n;
string a;
int i=0;
int b[10001];
for(int j=1;;j++){
for(int k=0;k<j;k++){
a=a+"1";
}
for(int k=0;k<j-1;k++){
a=a+"0";
}
b[j]=xxx(a);
if(b[j]>10000000){
i=j;
break;
}
a="";
}
int x=0;
for(int j=1;j<=i;j++){
if(b[j]<=n&&n%b[j]==0){ //这里忘记加了
x=b[j];
}
else if(b[j]>n) break;
}
cout<<x<<endl;
return 0;
}
本文介绍了一个有趣的数学问题:如何找到一个整数的最大“美丽”除数。美丽数是指其二进制表示由连续的 k+1 个 1 后跟 k 个 0 组成的整数。文章提供了一段 C++ 代码示例,用于解决这个问题。
1291

被折叠的 条评论
为什么被折叠?



