题目描述(北京邮电大学考研机试题)
给定一个长度为 32 位的二进制数 n,请你计算并输出 n+1 和 n+3 的二进制表示结果。
注意,结果不能忽略前导 0(不够 32 位的用前导 0 补足 32 位,超过 32 位的不用补前导 0)。
样例
输入样例
2
00000000000000000000000000000000
00000000000000000000000000000001
输出样例
00000000000000000000000000000001
00000000000000000000000000000011
00000000000000000000000000000010
00000000000000000000000000000100
数据范围
1≤T≤100
解题思路
对每次查询 $O(1)$
- 字符串处理加位运算;
- 注意使用大于32位的long 或long long来存储n;
#include<iostream>
using namespace std;
void prt(long n){
for(int i = 32; i >= 0; --i){
int t = n >> i & 1;
if(!t && i == 32) continue;
cout<<t;
}
cout<<endl;
}
int main()
{
int t;
cin>>t;
string s;
while(t--){
cin>>s;
long n = 0;
for(auto c : s) n = n*2 + c-'0';
prt(n+1);
prt(n+3);
}
return 0;
}