[LeetCode][LCR190]加密运算——全加器的实现

题目

LCR 190. 加密运算

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

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

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

  • 示例 1:

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

提示:

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

思考

  • 阅读题目,要求其实就是使用位运算实现全加器
  • 加法运算其实包括本位加法,然后查看是否有进位,再进行进位加法
  • 对不考虑进位的加法来说,每一位上的结果都是当0+0、1+1就是0,而0+1、1+0就是1。这种操作可以用异或 ^ 表示
  • 对于进位计算来说,0+0、0+1、1+0的进位结果都是 0,只有 1+1 的进位结果为1。这种操作可以用 & 表示
  • 所以算法流程如下:
    • 计算两个加数每一位的进位
    • 计算本位加法
    • 将进位作为一个加数
    • 循环直到有一个加数为0

class Solution {
public:
    // 这个函数计算两个整数的和,但不使用加法运算符
    int encryptionCalculate(int dataA, int dataB) {
        // 在没有进位的情况下执行按位加法
        while(dataB){
            // 通过按位与和左移操作计算进位
            int carry=(dataA & dataB) << 1;
            // 使用异或操作计算不考虑进位的和
            dataA^=dataB;
            // 为下一轮迭代赋值计算得到的进位
            dataB=carry;
        }
        // 返回计算得到的和
        return dataA;
    }
};

相关推荐

  1. [LeetCode][LCR190]加密运算——实现

    2024-04-06 16:04:01       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-06 16:04:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-06 16:04:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-06 16:04:01       82 阅读
  4. Python语言-面向对象

    2024-04-06 16:04:01       91 阅读

热门阅读

  1. Spark面试整理-如何在Spark中优化分区?

    2024-04-06 16:04:01       43 阅读
  2. 算法学习系列(四十五):DFS之剪枝与优化

    2024-04-06 16:04:01       126 阅读
  3. python图书自动折扣系统

    2024-04-06 16:04:01       152 阅读
  4. 回顾冒泡排序

    2024-04-06 16:04:01       45 阅读
  5. 【Golang】Golang超级实用的代码流

    2024-04-06 16:04:01       30 阅读
  6. 数据类型转换形式

    2024-04-06 16:04:01       39 阅读
  7. MFC:滑块控件与进度条控件的使用

    2024-04-06 16:04:01       37 阅读
  8. eNSP配置命令笔记

    2024-04-06 16:04:01       43 阅读