题目描述
给定一个长度为 32 位的二进制数 n,请你计算并输出 n+1 和 n+3 的二进制表示结果。
注意,结果不能忽略前导 0(不够 32 位的用前导 0 补足 32 位,超过 32 位的不用补前导 0)。
输入样例
2
00000000000000000000000000000000
00000000000000000000000000000001
输出样例
00000000000000000000000000000001
00000000000000000000000000000011
00000000000000000000000000000010
00000000000000000000000000000100
水解
纯字符串处理,n+1时,从后往前遍历,遇到1就变0直到遇到0或越界,将此位置为1,对于n+3,沿用n+1的结果计算n+2,从n+1的结果的倒数第二位往前遍历,采用同样的方法计算
C++ 代码
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
string s;
cin >> s;
string ans1 = s,ans2 = s;
int j = 31;
while(j >= 0 && ans1[j] != '0')
{
ans1[j] = '0';
j--;
}
if(j < 0)
{
ans1 = '1' + ans1;
}
else
{
ans1[j] = '1';
}
ans2 = ans1;
j = ans1.size() - 2;
while(j >= 0 && ans2[j] != '0')
{
ans2[j] = '0';
j--;
}
if(j < 0)
{
ans2 = '1' + ans2;
}
else
{
ans2[j] = '1';
}
cout << ans1 << endl;
cout << ans2 << endl;
}
return 0;
}