iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java不用算数运算符来实现求和方法
  • 547
分享到

Java不用算数运算符来实现求和方法

2024-04-02 19:04:59 547人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

今天遇到了这样一个题 题目说了不能用算数运算符,那么我们就只能从 逻辑运算符 和 移位运算符 入手了。 我们知道 ^ (异或)操作是对两个数进行无进位求和,如果两个数相加本来就不产

今天遇到了这样一个题

在这里插入图片描述

题目说了不能用算数运算符,那么我们就只能从 逻辑运算符 和 移位运算符 入手了。

我们知道 ^ (异或)操作是对两个数进行无进位求和,如果两个数相加本来就不产生进位,那么该和就是两数之和。 这就是解题的关键所在。一般来说,两数相加是会产生进位的,而要得到正确的和,应该是在 “无进位之和” 的基础上加上进位,那我们首先应该得到进位。我们知道,当两个数对应位置都为1的情况下,才会有进位的产生,即对应位置 A&B==1的条件下,就可以得到每一位的进位,但是进位是将这个1加到对应的更高一位,所以我们将得到的进位整体进行左移一位,再和之前得到的 “无进位之和” 相加,就可以得到两数之和。

我们发现这里就可以无限套娃了,要得到 “无进位之和” 和 “产生的进位” 之和,那么将这两个数再分别看做新的两个数,对其求和。也是重复之前的操作,直到两数不能产生进位,就可以直接通过 ^ 运算得到结果。

假设我们求 23 + 16 的值

在这里插入图片描述

在这里插入图片描述

根据上述思路,我们很容易就可以写出代码

public static int addAB(int A, int B) {
		// 当两数的产生的进位为 0,就退出循环,返回其无进位和,就是结果
        while ((A & B) != 0) {
            int A_B = A ^ B;// 无进位求和
            int AB = (A & B) << 1;// 得到进位
            // 接下来就是求 得到的进位 + 无进位之和,重复前面的操作,直到不产生进位
            A = A_B;
            B = AB;
        }
        // 最后返回新的无进位之和
        return (A ^ B);
    }

那么为了验证它的正确性,我们这里使用对数器,将该函数与 ’ + ’ 运算符比较。

public static void main(String[] args) {
    int count = 1_0000_0000;// 比较次数 100000000次
    Random random = new Random();// 生成随机数字
    boolean flag = true;// 相等则为 true

    for (int i = 0; i < count; i++) {
        int num1 = random.nextInt(Integer.MAX_VALUE/2);// 随机正数1
        int num1_2 = random.nextInt(Integer.MAX_VALUE/2);// 随机正数2
        // 随机正数1 + 随机正数2
        if ((num1+num1_2) != addAB(num1,num1_2)){
            // 有一次不相等的,则退出循环
            flag = false;
            break;
        }

        int num2 = -random.nextInt(Integer.MAX_VALUE/2);// 随机负数1
        int num2_2 = -random.nextInt(Integer.MAX_VALUE/2);// 随机负数2
        // 随机负数1  + 随机负数2
        if ((num2+num2_2) != addAB(num2,num2_2)){
            // 有一次不相等的,则退出循环
            flag = false;
            break;
        }

        int num3 = random.nextInt(Integer.MAX_VALUE);// 随机正数
        int num4 = -random.nextInt(Integer.MAX_VALUE);// 随机负数
        // 随机正数  + 随机负数
        if ((num3+num4) != addAB(num3,num4)){
            // 有一次不相等的,则退出循环
            flag = false;
            break;
        }
    }
    System.out.println(flag);
}

运行结果:

在这里插入图片描述

最后输出结果为 true ,说明我们计算随机产生的 正数+正数、负数+负数、正数+负数 分别100000000次,没有一次出错,说明该函数可靠。

到此这篇关于Java不用算数运算符来实现求和方法的文章就介绍到这了,更多相关Java 求和 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java不用算数运算符来实现求和方法

本文链接: https://www.lsjlt.com/news/144932.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java不用算数运算符来实现求和方法
    今天遇到了这样一个题 题目说了不能用算数运算符,那么我们就只能从 逻辑运算符 和 移位运算符 入手了。 我们知道 ^ (异或)操作是对两个数进行无进位求和,如果两个数相加本来就不产...
    99+
    2022-11-13
  • Java不用算数运算符怎么实现求和
    这篇文章主要介绍“Java不用算数运算符怎么实现求和”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java不用算数运算符怎么实现求和”文章能帮助大家解决问题。题目说了不能用算数运算符,那么我们就只能...
    99+
    2023-06-29
  • Python编程实现数学运算求一元二次方程的实根算法示例
    本文实例讲述了Python编程实现数学运算求一元二次方程的实根算法。分享给大家供大家参考,具体如下: 问题: 请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:ax&sup...
    99+
    2022-06-04
    实根 示例 算法
  • Go语言中可以使用哪些方法来实现运算符重载?
    Go语言作为一种静态类型的编程语言,与其他一些编程语言(如C++)不同,它并不直接支持运算符重载。运算符重载是指对编程语言中的运算符进行重新定义,使其能够适用于用户自定义的数据类型。但是,尽管Go语言本身并不支持运算符重载,但可以通过其他的...
    99+
    2023-12-23
    可以定义一个Vector类型
  • Java利用位运算实现加减乘除的方法详解
    目录前言一、常见位运算1. &运算2. |运算3. ^运算4. ~运算二、位运算实现加法三、位运算实现减法四、位运算实现乘法五、位运算实现除法前言 我们经常使用的加减乘除,我...
    99+
    2022-11-13
  • Python中怎么利用pandas实现求和运算和非空值个数统计
    今天就跟大家聊聊有关Python中怎么利用pandas实现求和运算和非空值个数统计,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。准备工作本文用到的表格内容如下:先来看一下原始情形:i...
    99+
    2023-06-20
  • PHP如何在不使用加减乘除运算符号的情况下实现加法
    这篇文章主要讲解了“PHP如何在不使用加减乘除运算符号的情况下实现加法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP如何在不使用加减乘除运算符号的情况下实现加法”吧!写一个函数,求两个...
    99+
    2023-06-20
  • 如何使用Java和NPM来优化你的LeetCode算法实现?
    LeetCode是一个非常流行的在线算法编程平台,它提供了大量的算法题目和编程挑战,可以帮助开发人员提高他们的算法和编程技能。Java和NPM是两个非常流行的编程工具,可以帮助开发人员更高效地实现他们的算法和代码。本文将介绍如何使用Jav...
    99+
    2023-09-23
    索引 npm leetcode
  • C# 运用params修饰符来实现变长参数传递的方法
    可变数目参数的好处就是在某些情况下可以方便地对参数个数不确定情况的实现,例如计算任意数字的加权和,链接任意字符串为一个字符串等。看下例子: 复制代码 代码如下:public cla...
    99+
    2022-11-15
    C# params 可变参数
  • 如何在 Go 中使用不同的数据类型来实现编程算法?
    在 Go 中使用不同的数据类型来实现编程算法是一个非常重要的技能。Go 是一种非常灵活的编程语言,它支持多种不同的数据类型,包括整型、浮点型、字符串、数组、切片、映射、结构体等等。在本文中,我们将介绍如何在 Go 中使用这些数据类型来实现编...
    99+
    2023-07-02
    数据类型 编程算法 容器
  • 【运筹优化】拉格朗日松弛 & 次梯度算法求解整数规划问题 + Java调用Cplex实战
    文章目录 一、拉格朗日松弛二、次梯度算法三、案例实战 一、拉格朗日松弛 当遇到一些很难求解的模型,但又不需要去求解它的精确解,只需要给出一个次优解或者解的上下界,这时便可以考虑采用松弛模...
    99+
    2023-10-26
    运筹优化 算法 Java 拉格朗日松弛 次梯度算法
  • 如何在Java中利用对象和数组实现高效的编程算法?
    Java是一种广泛使用的编程语言,因为它具有可移植性、可扩展性和可重用性等优点。在Java中,利用对象和数组实现高效的编程算法是非常常见的。本文将介绍如何在Java中利用对象和数组实现高效的编程算法,为大家提供一些实用的技巧和经验。 一、利...
    99+
    2023-10-31
    对象 编程算法 数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作