九日集训 LCR.190 加密运算

news2024/12/23 12:59:23

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

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

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

示例 1:

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

提示:

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

一、信息

1.给我两个通信数据

2.不使用四则运算

3.实现一个函数计算两次通信数据量之和

二、分析:

我的答案:

为了解决这个问题,我们可以使用之前提到的位运算方法来计算两个数的和,这样可以避免使用四则运算符。我们可以为每种语言写一个函数来实现这个功能。

### C语言实现

#include <stdio.h>

int calculateDataSum(int dataA, int dataB) {
    while(dataB != 0) {
        unsigned int carry = (unsigned int)(dataA & dataB) << 1;
        dataA = dataA ^ dataB;
        dataB = carry;
    }
    return dataA;
}

int main() {
    printf("%d\n", calculateDataSum(100, -50)); // 输出50
    printf("%d\n", calculateDataSum(-100, 50)); // 输出-50
    printf("%d\n", calculateDataSum(0, 50)); // 输出50
    return 0;
}

### C++实现

#include <iostream>

class Solution {
public:
    int calculateDataSum(int dataA, int dataB) {
        while (dataB != 0) {
            unsigned int carry = (unsigned int)(dataA & dataB) << 1;
            dataA = dataA ^ dataB;
            dataB = carry;
        }
        return dataA;
    }
};

int main() {
    Solution solution;
    std::cout << solution.calculateDataSum(100, -50) << std::endl; // 输出50
    std::cout << solution.calculateDataSum(-100, 50) << std::endl; // 输出-50
    std::cout << solution.calculateDataSum(0, 50) << std::endl; // 输出50
    return 0;
}

### Java实现

public class Solution {
    public int calculateDataSum(int dataA, int dataB) {
        while (dataB != 0) {
            int carry = (dataA & dataB) << 1;
            dataA = dataA ^ dataB;
            dataB = carry;
        }
        return dataA;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.calculateDataSum(100, -50)); // 输出50
        System.out.println(solution.calculateDataSum(-100, 50)); // 输出-50
        System.out.println(solution.calculateDataSum(0, 50)); // 输出50
    }
}

### 思考过程和分析过程

1. **问题理解**:
   - 我们需要计算两次通信的数据量之和。
   - 数据量可以是正数、负数或0。
   - 我们不能使用四则运算符。

2. **解决方案**:
   - 我们可以使用位运算来计算两个数的和,这样可以避免使用加法运算符。
   - 我们需要处理正数、负数和0的情况。由于我们使用的是位运算,所以我们不需要特别区分这些情况,因为位运算适用于所有整数。

3. **实现**:
   - 我们可以为每种语言写一个函数来实现这个功能。
   - 我们需要测试我们的函数以确保它在所有情况下都能正确工作。

4. **安全性和保密性**:
   - 由于我们没有使用四则运算符,所以我们的实现更加安全和保密。
   - 我们可以进一步考虑其他安全性和保密性的问题,例如数据的存储和传输安全性。

总结:

这和前面的计算两个数的和有什么异同?

这个问题和前面的计算两个数的和在核心解决方案上是相同的,都是通过位运算来实现加法,避免使用四则运算符。具体来说,都是使用异或运算来得到无进位和,使用与运算和左移运算来得到进位,然后将无进位和与进位相加,直到没有进位为止。

### 相同点:
1. **核心算法**:两者都是使用位运算来实现加法,避免使用加法和减法运算符。
2. **处理正负数**:两者都可以处理正数、负数和零,因为位运算适用于所有整数。
3. **通用性**:这种方法具有通用性,可以用于任何需要加法但不允许使用加法运算符的场合。

### 不同点:
1. **应用背景**:前一个问题是一个更为一般和基础的问题,而这个问题是在一个特定的应用背景下提出的,即计算机安全和数据通信。
2. **安全性要求**:这个问题强调了在数据传输过程中的高安全性和保密性,而前一个问题没有特别强调这一点。
3. **数据性质**:这个问题中,正数表示发送量,负数表示接收量,0表示数据遗失,这些都是在特定应用背景下的特定含义,而前一个问题中没有这些特定含义。

### 总结:
虽然两个问题在解决方案上有很多相同之处,但是它们的应用背景、要求和数据性质有所不同。这也说明了,一个算法或解决方案可以在不同的应用背景和场合下有不同的应用和实现。

学到了什么?

从这道题目中,我们可以学到以下几点:

### 1. **应用背景的重要性**
这道题目强调了应用背景对于问题定义和解决方案的影响。在特定的应用背景下,我们需要考虑特定的需求和约束,例如数据的性质和安全性要求。

### 2. **安全性和保密性**
这道题目涉及到了计算机安全和数据通信,强调了在数据传输过程中的高安全性和保密性。这教会我们在设计和实现解决方案时要考虑安全性和保密性,特别是在涉及到敏感数据的场合。

### 3. **算法的通用性和适应性**
这道题目使用了和前一个问题相同的核心算法,即位运算实现加法。这说明了一个好的算法或解决方案具有通用性和适应性,可以在不同的问题和应用背景下发挥作用。

### 4. **问题分析和解决**
这道题目要求我们在特定的约束条件下解决问题,即不使用四则运算符。这教会我们如何在有约束的条件下分析问题和寻找解决方案。

### 5. **编程实践**
实现这个算法需要编写代码,这是一种很好的编程实践。通过编写代码来实现算法,我们可以提高我们的编程能力,并且学会如何在实际代码中应用理论知识。

### 6. **细节处理**
在实现这个算法的过程中,我们需要考虑各种细节,例如进位的处理,正负数的处理等。这教会我们在设计算法和编写代码时要注意细节。

### 总结:
这道题目不仅教会我们如何在特定的应用背景和约束条件下解决问题,还强调了安全性和保密性的重要性,展示了算法的通用性和适应性,并提供了编程实践和细节处理的经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL索引看这篇就够了

能简单说一下索引的分类吗&#xff1f; 例如从基本使用使用的角度来讲&#xff1a; 主键索引: InnoDB 主键是默认的索引&#xff0c;数据列不允许重复&#xff0c;不允许为 NULL&#xff0c;一个表只能有一个主键。唯一索引: 数据列不允许重复&#xff0c;允许为 NULL 值&…

Vue.js2+Cesium1.103.0 十二、绑定多个 DOM 弹窗,并跟随视角实时更新位置

Vue.js2Cesium1.103.0 十二、绑定多个 DOM 弹窗&#xff0c;并跟随视角实时更新位置 Demo 基于 element-ui 的 Message 封装一个自定义弹窗&#xff0c;添加到页面中&#xff0c;并实时更新位置。 <template><divid"cesium-container"style"width: 1…

【RocketMQ】浅谈消息发送机制

【RocketMQ】浅谈消息发送机制 参考资料&#xff1a; 消息发送核心参数与工作原理详解 RocketMQ消息发送流程 RocketMQ 消息发送 原理详解 源码剖析 结合实际应用场景谈消息发送 《RocketMQ技术内幕》 文章目录 【RocketMQ】浅谈消息发送机制一、认识RocketMQ消息——Message二…

java语言对异常处理运行的初步探索(try-catch-finally)

​​​​​​异常处理机制 java中的异常处理机制使得即使程序出现异常&#xff0c;代码也能够继续执行下去而不是直接退出程序。下面我们先来简单的了解一下异常处理是怎么使用。 在引用异常处理之前&#xff0c;代码运行中存在异常会导致JVM直接中断该程序并输出异常信息&am…

stack的使用以及模拟实现

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

活动预告|Dragonfly 与你相约 2023 KubeCon Shanghai!

KubeCon CloudNativeCon Open Source Summit China 2023&#xff0c;由 Linux 基金会、CNCF 主办&#xff0c;将在 9 月 26-28 日于上海跨国采购会展中心盛大开幕。本次峰会将聚集全球社区&#xff0c;共同探讨云原生和开源领域的前沿洞察、核心技术与最佳实践&#xff0c;会…

Java基于SpringBoot的藏区特产销售系统的研究与实现

今天为大家带来的是基于 Java SpringBootVue 的藏区特产销售系统&#xff0c;大家有兴趣的可以看一下 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目…

ruoyi(若依)接口拦截路径配置,接口访问要授权,放开授权直接访问

1.找到文件SecurityConfig.java文件&#xff0c;里面配置相应的放行路径

[计算机入门] Windows附件程序介绍(办公类)

3.13 Windows附件程序介绍(办公类) 3.13.1 写字板 Windows系统中的写字板程序是一款简单而实用的文本编辑工具&#xff0c;它被广泛应用于快速记录笔记、绘制草图和进行简单的文档编辑。以下是写字板程序的主要功能和作用&#xff1a; 文本输入和编辑&#xff1a;写字板程序允…

数据结构-----二叉树的创建和遍历

目录 前言 二叉树的链式存储结构 二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 二叉树的创建 创建一个新节点的函数接口 1.创建二叉树返回根节点 2.已有根节点&#xff0c;创建二叉树 3.已有数据&#xff0c;创建二叉树 前言 在此之前我们学习了二叉树的定义和储…

HTML5+CSS3小实例:脉冲波纹催眠动画特效

实例:脉冲波纹催眠动画特效 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&qu…

ThingsBoard 前端项目背景图片部件开发

前言 ThingsBoard 是目前 Github 上最流行的开源物联网平台&#xff08;14.4k Star&#xff09;&#xff0c;可以实现物联网项目的快速开发、管理和扩展, 是中小微企业物联网平台的不二之选。 本文介绍如何在 ThingsBoard 前端项目中开发背景图片部件。 产品需求 最近接到产…

掌握可扩展和可维护应用程序:12-Factor应用程序开发的全面指南

1*vhxOhTuKSyuuAKu-nUQ5SA.jpeg 在今天的快节奏世界中&#xff0c;软件开发人员需要创建可扩展、可维护和适应性强的应用程序。12-Factor应用程序方法论是一组最佳实践&#xff0c;可以帮助开发人员实现这些目标。 本文深入探讨了12个因素&#xff0c;详细解释了它们的重要性以…

python 深度学习 解决遇到的报错问题5

目录 一、conda安装shapefile失败 二、conda安装osmnx失败&#xff1a;To search for alternate channels that may provide the conda package yourelooking for, navigate to 三、ERROR: Could not build wheels for llvmlite, which is required to install pyproject.to…

算法基础--位运算

一、常见位运算总结&#xff1a; 1、基础位运算&#xff08;^&#xff09; 其中异或^有2种理解。 2、位图bitset相关&#xff08;&|&#xff09; test判断第x位是1函数0: 可以让n右移&#xff0c;也可以让1左移&#xff0c;习惯上选择第一种 (n>>x)&1 判…

初创企业应该选一款怎样的客服系统?

互联网经济时代的飞速发展&#xff0c;促使客户市场对于企业服务的要求越来越高。客户在选择产品的时候已经不单单却决于产品功能和价格&#xff0c;客户服务也是其关注的重点。 优质的客户服务所带来的是客户满意度的提升&#xff0c;以及品牌影响力的提高。所以&#xff0c;…

Linux 服务器下 pypy 下载数据集

Linux 服务器下 pypy 下载数据集 安装 pip install bypy链接自己的百度网盘 命令行直接输入 byby info 就行 byby info查看网盘里面的内容 bypy listbyby list 只显示自动生成的bypy中的文件&#xff0c;上传也是在这个目录中&#xff0c;可以自己在里面新建文件夹 4. 上传…

tsar-性能监控工具

简介 tsar是淘宝自己开发的一个采集工具&#xff0c;主要用来收集服务器的系统信息&#xff08;如cpu&#xff0c;io&#xff0c;mem&#xff0c;tcp等&#xff09;&#xff0c;以及应用数据&#xff08;如squid haproxy nginx等&#xff09;。收集到的数据存储在磁盘上&#…

SMOKE-CMAQ实践技术应用

大气污染物排放是空气污染的源头&#xff0c;气象因素是影响污染程度的重要因素&#xff0c;因此空气质量模式要求气象资料和污染物排放清单作为输入&#xff0c;其中由于大气污染源复杂性、数据滞后性、动态变化、规律性不明显等特点&#xff0c;使得大气污染源排放清单输入准…

【牛客网】OR63 删除公共字符串

思路 创建哈希表,将第二个字符串中出现过的字符添加到哈希表中创建StringBuffer来拼接最后的结果字符串遍历字符串一,如果字符在哈希表中出现过,就不拼接到字符串中,反之则拼接 Java代码 import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public cl…