这题让我这个菜菜卡在最后的点才做完,你别笑
这题不难,要求不少
思路
输入n是众所周知
输入string类型的字符串(char也行),然后用数组存起来(记住,数组的第33个要附0)
下标为1的++,然后二进制往前推
第二个数组下表为1的+3,然后二进制往前推
记住,循环输出从33开始,特判下标为33的是否是1,是1输出,其他正常输出
代码加注释
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x[33],a[33];
string s;
cin>>n;//输入
for(int i=1;i<=n;i++){//循环
cin>>s;
a[33]=0;//附初始值
x[33]=0;//附初始值
for(int i=0;i<32;i++)
x[32-i]=s[i]-'0';//把字符串的每一个字符放到整数数组里
for(int i=1;i<=32;i++)
a[i]=x[i];//第二个数组
x[1]++;//个位+1
for(int i=1;i<=32;i++){
x[i+1]+=x[i]/2;//如果x[i]大于1,x[i+1]加x[i]/2;
x[i]%=2;x[i]取模2
}
a[1]+=3;//第二个数组个位加1
for(int i=1;i<=32;i++){
a[i+1]+=a[i]/2;//跟上面的思路一样
a[i]%=2;
}
for(int i=33;i>=1;i--)
if(i==33&&x[i]||i!=33)//33的特判,不是33的正常输出
cout<<x[i];
cout<<endl;//记得换行
for(int i=33;i>=1;i--)
if(i==33&&a[i]||i!=33)//和上面的思路一样
cout<<a[i];
cout<<endl;//记得换行
}
return 0;
}
这是代码(不加注释)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x[33],a[33];
string s;
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
a[33]=0;
x[33]=0;
for(int i=0;i<32;i++)
x[32-i]=s[i]-'0';
for(int i=1;i<=32;i++)
a[i]=x[i];
x[1]++;
for(int i=1;i<=32;i++){
x[i+1]+=x[i]/2;
x[i]%=2;
}
a[1]+=3;
for(int i=1;i<=32;i++){
a[i+1]+=a[i]/2;
a[i]%=2;
}
for(int i=33;i>=1;i--)
if(i==33&&x[i]||i!=33)
cout<<x[i];
cout<<endl;
for(int i=33;i>=1;i--)
if(i==33&&a[i]||i!=33)
cout<<a[i];
cout<<endl;
}
return 0;
}
你学废了吗?学废了点个赞吧!
感谢 龚子昂 的支持
谢谢itdef大佬,已关注