Java 取模和取余

这篇具有很好参考价值的文章主要介绍了Java 取模和取余。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java 取余和取模都是计算一个整数除以另一个整数后所得到余数。计算原理如下:

  1. 取余运算符 % 表示求余数运算,计算公式为 a % b = r,其中 ab 分别表示被除数和除数,r 表示所得到的余数。这个运算符将 a 除以 b,并返回余数 r。需要注意的是,如果 a 符号为正,则 r 的符号也为正;如果 a 符号为负,则 r 的符号也为负。

  1. 取模方法 Math.floorMod() 表示对余数进行修正运算,计算公式为 Math.floorMod(a, b) = r',其中 ab 同样分别表示被除数和除数,r' 表示修正后的余数。这个方法先通过 % 运算符计算出原始的余数 r,然后根据 rb 的符号来调整 r 的值,得到最终的余数 r'。如果 b 的符号为正,则 r' 的范围在 [0, |b|) 之间;如果 b 符号为负,则 r' 的范围在 (|b|, 0] 之间。

被除数÷除数= (a÷b=c)商...余数

通常取模运算也叫取余运算,它们返回结果都是余数 .rem 和 mod 唯一的区别在于:

x 和 y 的正负号一样的时候,两个函数结果是等同的;当 x 和 y 的符号不同时,rem 函数结果的符号和 x 的一样,而 mod 和 y 一样

但是python(里面%是取模运算)和c++(里面%是取余不是取模)

两个异号整数取模取值规律 (当为小数时也是这个运算规律,这点好像与 C 语言不太一样)

无论除数或者被除数是否为负数,先将两个整数看作是正数,(即取绝对值先进行计算),得到商的绝对值,再作除法运算:

1、能整除时,其值为 0

2、不能整除时,取余结果=除数×(整商+1)-被除数;

当被除数和除数均为正数时:

  • 取余运算符 %:10 % 3 = 1,因为 10 ÷ 3 = 3 余 1;

  • 取模方法 Math.floorMod():Math.floorMod(10, 3) = 1,也是因为 10 ÷ 3 = 3 余 1。

当被除数为负数,除数为正数时:

  • 取余运算符 %:-10 % 3 = -1,因为 -10 ÷ 3 = -3 余 -1,而符号与被除数相同,所以余数为 -1;

  • 取模方法 Math.floorMod():Math.floorMod(-10, 3) = 2,因为 -10 ÷ 3 = -3 余 -1,而修正后的余数为 [2, 3),即 2。

当被除数为正数,除数为负数时:

  • 取余运算符 %:10 % -3 = 1,因为 10 ÷ -3 = -3 余 1,而余数的符号与被除数相同,所以余数为 1;

  • 取模方法 Math.floorMod():Math.floorMod(10, -3) = -2,因为 10 ÷ -3 = -3 余 1,而修正后的余数为 (-3, -2],即 -2。

当被除数和除数均为负数时:

  • 取余运算符 %:-10 % -3 = -1,因为 -10 ÷ -3 = 3 余 -1,而符号与被除数相同,所以余数为 -1;

  • 取模方法 Math.floorMod():Math.floorMod(-10, -3)= -1,也是因为 -10 ÷ -3 = 3 余 -1。

public class Main {
public static void main(String[] args) {
        int a = -5;
        int b = 10;
        int c = -11;
        int d = -10;
        System.out.println(a/b);//0
        System.out.println(a%b);//-5
        System.out.println(c%d);//-1
    }
}

Java中的取模和取余可以应用于很多编程场景中,例如:

  1. 数字处理:在需要对两个数进行除法运算后获取余数时,可以使用取模或取余。这个场景通常应用于数字验证、校验等功能上。

%:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。将一个数值限制在0到9之间,可以通过对其进行取模操作实现)

例如实现判断实现某个数是否为水仙花数:

/**
 * 水仙花数,如: 153 = 1^3+5^3+3^3
 * 统计100 到1000 中有多少个三位数的水仙花数
 * / 除号:整数除和小数除是有区别的。整数之间做除法时,只保留整数部分而舍弃小数部分
 * 例如 10.0 / 4 = 2.5,10 / 4 =2 。所以 153 / 100 = 1
 * % 取模,取余:本质是 a % b = a - a / b * b。但是我们一般认为是其被除之后的余数
 * 例如 10 / 3 = 1。所以 153 % 100 = 53,然后 53 / 10 = 5
 * int a=i % 10;   //个位
 * int b=i /10 %10; //十位
 * int c=i /100 %10; //百位
 */
    public class ShaiXianHa {
        public static void main(String[] args) {
            int count = 0; // 计数器变量
            for (int m = 90; m < 10000; m++) { // 将循环范围修改为 90 ~ 10000
                if (m < 100 || m > 999) { // 判断是否为三位数
                    //使用 continue 和 break 的效果是不同的,使用 continue 可以跳过当前循环,进入下一个循环;
                    // 而使用 break 可以立即退出循环,不再进行后续的循环。
                    // 在本题中,如果使用 break 来代替 continue,会导致程序在找到第一个不满足条件的数时就立刻退出循环
                    // 而没有遍历完所有的数,因此无法正确统计出符合条件的水仙花数的个数。
                    //例如,如果将代码中的 continue 改为 break,则程序只能找到第一个不符合条件的数,
                    // 并输出结果为 0 个水仙花数,这显然是不正确的。
                    continue; // 如果不是三位数,跳过本次循环
                }
                int b3 = m / 100;
                int b2 = (m % 100) / 10;
                int b1 = m % 10;
                if (m == (b3 * b3 * b3) + (b2 * b2 * b2) + (b1 * b1 * b1)) { // 判断是否为水仙花数
                    System.out.println(m + "是一个水仙花数");
                    count++; // 每找到一个水仙花数,计数器加 1
                }
            }
            System.out.println("三位数的水仙花数共有" + count + "个");
        }
    }
  1. 日期计算:在Java程序开发中,需要进行日期和时间的处理和比较。其中,取余运算符 % 能够很好地用于时间戳的计算、日期的周期性检测等。

例如实现判断闰年:

public class RunYear {
    public static void main(String[] args) {
        int count = 0 ;
        for(int year= 2000; year <= 3000;year++){ 
            //闰年定义:能够被 4 整除但不能被 100 整除的年份,或者能够被 400 整除的年份均为闰年
            //if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)// 判断是否为闰年
            if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0){
                //\n 是一个特殊字符,表示换行符,用于将输出结果换行显示;而 \t 代表制表符,用于产生一个制表符的空格。
                //因此,"%d是闰年\n",year 的作用是将 "year是闰年" 这个字符串输出到控制台,并将 year 的值替换为实际的年份,
                // 同时在末尾加上一个换行符,使得下一条输出语句可以从新的一行开始输出。
                //而"%d是闰年\t",year 的作用则是将 "year是闰年" 这个字符串输出到控制台,并将 year 的值替换为实际的年份
                //同时在末尾加上一个制表符的空格,用于在同一行输出下一个元素。
                //例如,如果当前的年份为 2000,则输出结果为 "2000是闰年    "(这里的空格代表一个制表符)。
                System.out.printf("%d是闰年\t",year);
                count++; // 如果是闰年,计数器加 1
            }else {
                System.out.println(year + "不是闰年");
            }
        }System.out.println("2000年到3000年中共有 " + count + " 个闰年");
    }
}
  1. 奇偶判断:在判断一个整数是偶数还是奇数时,可以使用取模或者取余。具体来说,如果一个数除以2的余数为0,则表示该数为偶数;否则,表示该数为奇数。

int num = 15;
if (num % 2 == 0) {
    System.out.println("该数为偶数");
} else {
   System.out.println("该数为奇数");
}
  1. 加密算法:在一些加密算法中,也需要使用取余或取模运算,例如RSA加密算法、哈希算法等。

在RSA算法中,在加密操作中,我们使用公钥进行模幂运算,即将原始数据使用公钥的指数进行加密,并对结果进行取模操作,得到加密后的数据。在解密操作中,我们使用私钥进行模幂运算,即将加密后的数据使用私钥的指数进行解密,并对结果进行取模操作,得到原始数据。文章来源地址https://www.toymoban.com/news/detail-447653.html

到了这里,关于Java 取模和取余的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java中取模运算

    在Java中,取模运算使用百分号(%)符号表示。它返回两个操作数相除后的余数。下面是一些示例: 正数取模:如果被除数为正数,取模运算的结果也为正数。例如: int a = 10; int b = 3; int result = a % b; System.out.println(result);  // 输出结果为 1 在这个例子中,将10除以3,得到商为

    2024年02月11日
    浏览(28)
  • Java RSA密钥从RSAPrivateKey和RSAPublicKey对象中,分别提取模和指数

    在Java编程中,我们经常用到如下一段代码来生成RSA公私钥,分别拿到公私钥然后加解密计算: 本文讲述如何从RSAPublicKey publicKey和RSAPrivateKey privateKey 分别提取出模和指数 编辑器:android studio sdk: compileSdkVersion 30 buildToolsVersion \\\"30.0.3\\\"m inSdkVersion 24 targetSdkVersion 26 运行平台:an

    2024年02月07日
    浏览(26)
  • 小杨想要构造一个 N*N 的 X 字矩阵(N为奇数),这个矩阵的两条对角线都是半角加号 + ,其余都是半角减号 - 。例如,一个 5*5 的 X 字矩阵如下:+---+-+-+---+---

    #includebits/stdc++.h using namespace std; int main(){      int n,w=0,m=1;      cinn;      for ( int i=1;i=n;i++){          for ( int j=1;j=n;j++){              if (j==m||j==n-w){                  cout \\\"+\\\" ;              } else {                  cout \\\"-\\\" ;              }

    2024年02月05日
    浏览(49)
  • win10不小心将所有软件的打开方式改成了某一个软件,导致打开任何一个软件都是同一个软件

    当我们不小心将软件的打开方式改成了某一个软件时,会导致打开任何一个软件都是同一个软件,怎么解决呢(这个时候我们也发现注册表也是打不开的) 解决方案: 第1步: 我们可以先下载博主的注册表 打不开时的文件1,下载地址:https://download.csdn.net/download/csshuaige/6696474

    2024年02月04日
    浏览(74)
  • 在任何文件夹下打开jupyter 内核都是同一个文件夹

     我在 D:anaconda实例代码 下打开jupyter notebook  无论我在那个文件下打开jupyter 都是同一个文件这是因为你可能在jupyter notebook 的那个配置文件中设置固定的路径 假如你的.py 文件在D:anaconda实例代码 下 你想通过jupyter notebook 运行它很简单  上传到jupyter notebook本地      如何运

    2024年02月12日
    浏览(41)
  • Java算法题 给一个字符串表达式,实现一个基本计算器,返回计算结果

    题目: 考点:栈 解题思路: 使用 2 个栈,一个 stack_nums 用来保存计算过程的操作数,一个 stack_symbol 用来保存运算符。 在HashMap中,指定加减优先级为1,乘除优先级为2 循环遍历字符串s, 操作符入栈: 若当前字符为\\\'+\\\', \\\'-\\\', \\\'*\\\', \\\'/\\\', \\\'(\\\' 时,压入运算符栈 stack_symbol, 操作数入

    2024年02月07日
    浏览(36)
  • 详解5种网站 静态网站、动态网站、伪静态网站、云计算网站都是什么

    网站,在日常生活中已经是一种司空见惯的东西。但如果你真正要做一个网站,或者学习开发一个网站的时候。你会发现网站其实也分很多种。你会听到很多概念:静态网站、动态网站、前端、后端、伪静态网站、数据库、云计算、H5等。那么,我们就来聊聊网站为什么会有

    2023年04月23日
    浏览(34)
  • Java——一个简单的计算器程序

      该代码是一个简单的计算器程序,使用了Java的图形化界面库Swing。具体分析如下: 导入必要的类和包: 代码中导入了用于创建图形界面的类和接口,以及其他必要的类。 定义Calculator类: 代码中定义了一个名为Calculator的类,继承了JFrame类,并实现了ActionListener接口。Calc

    2024年02月04日
    浏览(36)
  • Java设计一个简单的计算器程序

    计算器是一种常见的工具,用于进行基本数学运算。在计算机科学中,我们可以使用编程语言来模拟和实现一个计算器程序。本文将基于Java语言,设计并实现一个简单的计算器程序。 1. 需求分析 在设计计算器程序之前,我们需要明确程序的需求。本文设计的计算器程序应满

    2024年02月05日
    浏览(44)
  • 【Java】Java使用Swing实现一个模拟计算器(有源码)

       📝个人主页:哈__ 期待您的关注  今天翻了翻之前写的代码,发现自己之前还写了一个计算器,今天把我之前写的代码分享出来。  我记得那会儿刚学不会写,写的乱七八糟,但拿来当期末作业还是不错的哈哈。 直接上源码,后上讲解。 计算器上的按键不少,我们都定

    2024年04月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包