Problem A 二进制
题目描述:
32位二进制数 X ,对其进行X+1,X+3操作,并输出。注意不能忽略前导0。
输入 第一行,一个整数 T ,代表测试数据组数。接着 T 行,输入32为二进制数输出对每组测试数据。
输出 两行,第一行为X+1,第二行为X+3.
测试样例 输入 2 00000000000000000000000000000000 00000000000000000000000000000001 输出 00000000000000000000000000000001 00000000000000000000000000000011 00000000000000000000000000000010 00000000000000000000000000000100
算法实现:
#include<iostream> #include<string.h> using namespace std; void zhuanhua(int a) { int s[32]={0};//不要用char数组存放并输出,会出问题 int i=0; while(a!=0) { s[i]=a%2; a=a/2; i++; } for(int j=31;j>=0;j--) { cout<<s[j]; } cout<<endl; } void zhuanhua1(char s[]) { int length=strlen(s); int tmp=0; int c=1; for(int i=length-1;i>=0;i--) { int x; x=s[i]-'0'; tmp=tmp+x*c; c=c*2; } tmp+=1;
zhuanhua(tmp); } void zhuanhua2(char s[]) { int length=strlen(s); int tmp=0; int c=1; for(int i=length-1;i>=0;i--) { int x; x=s[i]-'0'; tmp=tmp+x*c; c=c*2; } tmp+=3;
zhuanhua(tmp); } int main() { int n; cin>>n; while(n>0) { char s[32]; cin>>s; zhuanhua1(s); zhuanhua2(s); n--; } return 0; }