力扣67、二进制求和

 本题一定要注意char与int之间的类型转化!!!

直接用强制类型转化,是按照ASCII表进行转换的,

因为ASCII码的数字(0)从48开始,字符‘0’对应的数字是48,所以我们在int和char之间转换可以用‘0’直接转换,转换为char转int -‘0’ ,int转char +‘0’

int a=1;
	char b=2;
	//强制类型转换
	int c = int(b);
	char d = char(a);
	//转换为对应的数字用‘0’来转换
	int cc = b - '0';
	char dd = a + '0';

解题思路:

        将字符串a和b总后往前遍历,初始化一个字符串str,定义一个int类型的变量temp用来记录进位,i和j作为字符串a和b的下标,初始化i和j的值为字符串a和b的末尾,然后通过遍历往前移,

        用while循环,当a和b中有一个不为空的时候,进入循化,用n来记录字符串a中对应的值,用m来记录字符串b中对应的值,当i>=0时,n=a[i]-‘0’(注意类型转换,此时a[i]是char类型,要转为int类型,+‘0’),如果i<0,说明字符串a已经被遍历完了,n=0即可;同理得m;

        定义sum=n+m+temp,向字符串中添加sum%2,然后修改进位值temp=sum/2;判断i和j是否可以继续向左移动,如果可以i--和j--;

        循环结束后,判断进位值是否有值,如果有,需要向字符串str再添加进位1;

        最后需要反转字符串str,因为str放入的顺序相反。

class Solution {
public:
    string addBinary(string a, string b) {
        int i=a.size()-1;
        int j=b.size()-1;
        int temp=0;//记录进位
        string str;
        while(i>=0||j>=0){
            int n = i >= 0 ? a[i]-'0' : 0;
		    int m = j >= 0 ? b[j]-'0' : 0;
            int sum=n+m+temp;
            str.push_back(sum%2+'0');
            temp=sum/2;

            if(i>=0)i--;
            if(j>=0)j--;
        }
        if(temp==1){//字符串遍历完后,进位数还有值,就要再添加字符一道字符串尾部
            str.push_back('1');
        }
        reverse(str.begin(),str.end());//反转字符串
        return str;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值