【Leetcode 每日一题】LCR 190. 加密运算

LCR 190. 加密运算

计算机安全专家正在开发一款高度安全的加密通信软件,需要在进行数据传输时对数据进行加密和解密操作。假定 dataA 和 dataB 分别为随机抽样的两次通信的数据量:

  • 正数为发送量
  • 负数为接受量
  • 0 为数据遗失

请不使用四则运算符的情况下实现一个函数计算两次通信的数据量之和(三种情况均需被统计),以确保在数据传输过程中的高安全性和保密性。

示例 1:

输入:dataA = 5, dataB = -1
输出:4

提示:

  • dataA 和 dataB 均可能是负数或 0
  • 结果不会溢出 32 位整数

思路:

二进制加法器,&表示进位,^表示本位,<<表示左移,共同构成全加器。

十进制例子:13 + 98 = 111

  百 十 个
      1  3
   + 9  8
     ------
      0  1 // 本位
      1  1 // 进位

然后:

      0 1

+ 1 1 0

  --------

   1 1 1

代码:

class Solution {
public:
    int encryptionCalculate(int dataA, int dataB) {
        while(dataB){
            int c = dataA & dataB; //进位,都是1才能进位
            dataA = dataA ^ dataB; //本位,相同则为0,不同则为1
            dataB = (unsigned)c << 1;
        }
        return dataA;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值