版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38262266/article/details/87928683
/*
1.二进制数字调转
题目描述:一个2^32的数字n,将其转换成二进制数,再倒转,求倒转的二进制数对应的十进制数。
例如:
123
0000 0000 0000 0000 0000 0000 0111 1011
1101 1110 0000 0000 0000 0000 0000 0000
3724541952
举例:
输入:123
输出:3724541952
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
cin>>a;
int len = a.length();
int c[len];
int max_len = 0;
if(a[0]=='0')
{
c[0] = -1;
}
else{
c[0] = 1;
}
for(int i=1; i<len; i++)
{
if(a[i]=='0')
{
c[i] = c[i-1]-1;
}
else
{
c[i] = c[i-1]+1;
}
}
for(int i=0;i<len;i++)
{
cout<<c[i]<<" ";
}
cout<<endl;
for(int i=0;i<len;i++)
{
for(int j=len-1;j>0;j--)
{
if(c[i]==c[j])
{
if(j-i>max_len)
max_len = j-i;
break;
}
}
}
cout<<max_len<<endl;
return 0;
}
/*
输出数字
题目描述:不同数字的输出形状如下:
黑色部分是1,白色部分是0。
输入:长度为1-20的字符串
输出:0和1组合的数字形状,
举例:
输入:01
输出:
111001
101001
101001
101001
111001
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int len = s.length();
int num = 0;
for(int j=0; j<6; j++)
for(int i=0; i<len; i++)
{
int a = s[i]-'1'+1;
if(j==0)
{
if(a==0)
{
cout<<"111";
}
if(a==1)
{
cout<<"001";
}
if(a==2)
{
cout<<"111";
}
if(a==3)
{
cout<<"111";
}
if(a==4)
{
cout<<"101";
}
if(a==5)
{
cout<<"111";
}
if(a==6)
{
cout<<"111";
}
if(a==7)
{
cout<<"111";
}
if(a==8)
{
cout<<"111";
}
if(a==9)
{
cout<<"111";
}
if(i==len-1)
{
cout<<endl;
}
}
if(j==1)
{
if(a==0)
{
cout<<"101";
}
if(a==1)
{
cout<<"001";
}
if(a==2)
{
cout<<"001";
}
if(a==3)
{
cout<<"001";
}
if(a==4)
{
cout<<"101";
}
if(a==5)
{
cout<<"100";
}
if(a==6)
{
cout<<"100";
}
if(a==7)
{
cout<<"001";
}
if(a==8)
{
cout<<"101";
}
if(a==9)
{
cout<<"101";
}
if(i==len-1)
{
cout<<endl;
}
}
if(j==2)
{
if(a==0)
{
cout<<"101";
}
if(a==1)
{
cout<<"001";
}
if(a==2)
{
cout<<"111";
}
if(a==3)
{
cout<<"111";
}
if(a==4)
{
cout<<"111";
}
if(a==5)
{
cout<<"111";
}
if(a==6)
{
cout<<"111";
}
if(a==7)
{
cout<<"001";
}
if(a==8)
{
cout<<"111";
}
if(a==9)
{
cout<<"111";
}
if(i==len-1)
{
cout<<endl;
}
}
if(j==3)
{
if(a==0)
{
cout<<"101";
}
if(a==1)
{
cout<<"001";
}
if(a==2)
{
cout<<"100";
}
if(a==3)
{
cout<<"001";
}
if(a==4)
{
cout<<"001";
}
if(a==5)
{
cout<<"001";
}
if(a==6)
{
cout<<"101";
}
if(a==7)
{
cout<<"001";
}
if(a==8)
{
cout<<"101";
}
if(a==9)
{
cout<<"001";
}
if(i==len-1)
{
cout<<endl;
}
}
if(j==4)
{
if(a==0)
{
cout<<"111";
}
if(a==1)
{
cout<<"001";
}
if(a==2)
{
cout<<"111";
}
if(a==3)
{
cout<<"111";
}
if(a==4)
{
cout<<"001";
}
if(a==5)
{
cout<<"111";
}
if(a==6)
{
cout<<"001";
}
if(a==7)
{
cout<<"001";
}
if(a==8)
{
cout<<"111";
}
if(a==9)
{
cout<<"111";
}
if(i==len-1)
{
cout<<endl;
}
}
}
return 0;
}
不会
/*
最长平衡子串
题目描述:只包含0和1的数字串中,如果0和1的个数一样,称为平衡字符串。求一个字符串的最长平衡子串
举例:
输入:01011
输出:4
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a;
cin>>a;
int b[33] = {0};
if(a%2==0)
{
b[32] = 0;
}
else
{
b[32] = 1;
}
long long k=1;
int cishu = 1;
while(a>1)
{
while(k<=a)
{
k = k*2;
cishu++;
}
cishu--;
b[32-cishu+1] = 1;
a = a-k/2;
cishu = 1;
k = 1;
}
int i=1,j=32;
while(i<j){
int temp = b[i];
b[i] = b[j];
b[j] = temp;
i++;
j--;
}
// for(int i=1; i<=32; i++)
// {
// cout<<b[i];
// }
long long sum=0;
long long w = 1;
if(b[32]==1) sum = sum+1;
for(int i=31;i>=1;i--)
{
if(b[i]==1){
int p = 32-i;
while(p--){
w = w*2;
}
sum+=w;
}
w = 1;
}
cout<<sum<<endl;
return 0;
}