题目描述
给定一个长度为 32 位的二进制数 n,请你计算并输出 n+1 和 n+3
的二进制表示结果。
注意,结果不能忽略前导 0
(不够 32 位的用前导 0 补足 32 位,超过 32 位的不用补前导 0)。
样例
输入样例:
2
00000000000000000000000000000000
00000000000000000000000000000001
输出样例:
00000000000000000000000000000001
00000000000000000000000000000011
00000000000000000000000000000010
00000000000000000000000000000100
较为简洁的代码,用1来更新进位
嘿嘿,也不算简洁,但是好想一点
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void f_n(string &s){//引用符号修改
//n+1位的结果
int cnt=s.length()-1;//字符串的长度在变,不要忘记,我也犯错了QAQ
if(1+s[cnt]-'0'==2){//进位
int ans=1;
while((s[cnt]-'0')&ans&&cnt>=0){
s[cnt--]='0';
}
if(cnt>=0)s[cnt]='1';//判断一下边界
else s='1'+s;//增加1位
}else {
s[cnt]='1';
}
return ;
//输出n+3位的结果循环三次n+1
}
int main(){
int t;
cin>>t;
while(t--){
string s;
cin>>s;
f_n(s);
cout<<s<<endl;
for(int i=1;i<=2;i++)f_n(s);//由于之前进行了变量引用,这里只需循环了两次
cout<<s<<endl;
}
return 0;
}