思路
记得要用long long来计算,因为11111111111111111111111111111111是int的极限,如果继续加1或者加3的话就会爆int的,爆int的话就变成负数了,实际上我们我们需要的是一个long long的和值对吧,所以我们索性一开始就用long long来计算就可以了,然后我们每次讲加好的数一位一位输出出来的时候我们检查一下n>>32&1是否等于1就可以了,等于1的话就输出多输出一个1,不然的话就不输出就可以了
代码
#include<bits/stdc++.h>
using namespace std;
int t;
long long n;
long long tran(string s)
{
long long sum=0;
for(int i=0;i<32;i++)
{
sum+=(s[31-i]-'0')*pow(2,i);
}
return sum;
}
void f(long long n)
{
if(n>>32&1)cout<<1;
for(int i=0;i<32;i++)
{
if(n>>(31-i)&1)cout<<1;
else cout<<0;
}
cout<<endl;
}
int main()
{
cin>>t;
while(t--)
{
string s;
cin>>s;
n=tran(s);
f(n+1);
f(n+3);
}
return 0;
}