二进制加法

题目描述:
在这里插入图片描述
代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    
	int t=0,n=0,len=0;
	char s[333],s1[333],s3[333];
	cin>>t; 
	int i=1;
	int flag=0;
	while(i<=t)
	{
    
    
		cin>>s;
		flag=1;//加一 
		int k=0;
		for(int j=strlen(s)-1;j>=0;--j)
		{
    
    
			n=s[j]-'0'+flag;
			s1[k++]=n%2+'0';//倒着存 
			flag=n/2;				
		}
		s1[k]=flag+'0';//flag为最后一次进位,若为1 若s1超过32位,则不能省去。若为0,若s1超过32位,则输出时需要省掉这个0
		len=k;		
		if(flag==0)//s[32]==0的情况,倒着输出时s[32]不可输出
			for(int j=len-1;j>=0;--j)
			{
    
    
				
				cout<<s1[j];
			}
		else 
			for(int j=len;j>=0;--j)
			{
    
    
				
				cout<<s1[j];
			}
		cout<<endl;
		
		flag=3;//加3
		k=0;
		for(int j=strlen(s)-1;j>=0;--j)
		{
    
    
			n=s[j]-'0'+flag;
			s3[k++]=n%2+'0';//倒着存 
			flag=n/2;				
		}
		s3[k]=flag+'0';
		len=k;		
		if(flag==0)
			for(int j=len-1;j>=0;--j)
			{
    
    
				
				cout<<s3[j];
			}
		else 
			for(int j=len;j>=0;--j)
			{
    
    
				
				cout<<s3[j];
			}
		cout<<endl;
		i++; 
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43901182/article/details/112465172
今日推荐