精华内容
下载资源
问答
  • 一个简单的实现方法是将对象通过某种运算得到一个整数,再让这个整数除以哈希表的大小,取其余数,以此作为对象的存储位置。很多的书上认为,哈希表的大小最好是选择一个大的质数,并且最好不要和2的整数幂接近。...

    Hash Table(哈希表)就是根据对象的特征进行定位的一种数据结构。一个简单的实现方法是将对象通过某种运算得到一个整数,再让这个整数除以哈希表的大小,取其余数,以此作为对象的存储位置。

    很多的书上认为,哈希表的大小最好是选择一个大的质数,并且最好不要和2的整数幂接近。《算法导论》上还认为,最不好的选择是哈希表的大小恰好是2的整数幂,对此的解释是(只记得大意):因为计算机是用二进制存储的,当一个二进制数除以一个2的整数幂的时候,结果就是这个二进制数的后几位,前面的位都丢失了,也就意味着丢失了一部分信息,进而导致哈希表中的元素分布不均匀。

    这个解释看似合理,但我不认同。不光是我,Java开发小组的人也不认同。Java里的HashSet类偏偏就把哈希表的大小设置成2的整数幂。可以设想一下,对于自然数集合中的任意一个数x,对于一个正整数M,难道x mod M为某些值的概率会大些吗。显然不是,因为x是在自然数集合里任选的,当选取的次数非常多时,x mod M的结果应该是平均分布在[0,M-1]中。我认为《算法导论》的错误在于先引入了二进制,其实二进制和哈希表的“碰撞”根本没有什么关系;然后说对除以2^n的余数会丢失位,丢失信息,这显然也不对,因为只要x>=M,x mod M的结果总是要“丢失一些信息的”。照《算法导论》的说法,如果计算机采用十进制,那哈希表的容量是10^n的话岂不是很糟。这种解释显然站不住脚。

    我认为对于x mod M这样的哈希函数来说,好坏应该取决于x的生成方式和M的值。比如一个字符串“ABC”,如果我让x("ABC")=65*128^2+66*128+67,即把字符串当成一个128进制的整数,那么若M=128,那就很糟糕了。因为这样无论是什么字符串,最终结果只取决于最后一个字符,这才会造成分布不均匀。

    所谓链表是指一种常用的数据结构通常由一系列结点组成,每个结点含两个信息域和指针域.信息域用于存放有关的数据项,指针域则用于指向链表的下一个结点。

    展开全文
  • 例如:+表达 用运算符连起来的 的式子 叫做表达式 比如20 + 5 又比如 a + b四则运算加 +减 -乘 *除 /取模 (取余数)%首先计算 得到 表达式的结果 然后在打印输出这个结果复习一下小学一年级的除法公式被除数 / 除数 =...

    /*

    运算符:进行特定的操作的符号。例如:+

    表达 用运算符连起来的 的式子 叫做表达式 比如20 + 5 又比如 a + b

    四则运算

    加 +

    减 -

    乘 *

    除 /

    取模 (取余数)%

    首先计算 得到 表达式的结果 然后在打印输出这个结果

    复习一下小学一年级的除法公式

    被除数 / 除数 = 商 … 余数

    对于一个整数 表达式来说 除法用的是 整除 整数除以除数 结果还是整数

    只有看商数 不看余数 的。

    注意事项

    1.一旦运算中 如果有不同的类型的数据 那么将会是数据范围大的那种。

    */

    public class Demoperator {

    public static void main(String[]args) {

    //二个变量之间可以进行数学运算

    System.out.println(20 + 30);

    //二个变量之间可以进行数学运算

    int a = 20;

    int b = 30;

    System.out.println(a - b);//10

    //变量之间还可以混合使用

    System.out.println(a * 10);//200

    int x = 10;

    int y = 3;

    int result1 = x / y;

    System.out.println(result1);//3

    int result2 = x % y;

    System.out.println(result2);//余数 模 1

    //int + double --> double + double -->double

    double result3 = x + 2.5;

    System.out.println(result3);//12.5

    }

    }

    c8baccdd29c652d546df37ec9aa0ecc6.png

    展开全文
  • 现有一个大于 1 的整数 x,将其作为除数分别除 a,b,c,得到余数相同。 请问满足上述条件的x的最小值是多少? 数据保证 xx 有解。 输入格式 一行,三个不大于 1000000的正整数 a,b,c,两个整数之间用一个空格隔...

    计蒜客 T1201 余数相同问题

    小蒜有三个正整数 a,b,c。

    现有一个大于 1 的整数 x,将其作为除数分别除 a,b,c,得到的余数相同。

    请问满足上述条件的x的最小值是多少?

    数据保证 xx 有解。

    输入格式
    一行,三个不大于 1000000的正整数 a,b,c,两个整数之间用一个空格隔开。

    输出格式
    一个整数,即满足条件的 x 的最小值。

    样例输入
    300 262 205

    样例输出
    19

    import java.util.Scanner;
    public class Main {
    	public static void main(String[] args){
    		Scanner in=new Scanner(System.in);
    		int a=in.nextInt();
    		int b=in.nextInt();
    		int c=in.nextInt();
    		for(int i=2;i<1000000;i++) {
    			if((a%i==b%i)&&(a%i==c%i)) {
    				System.out.println(i);
    				return;
    			}
    		}
    		
    	}
    }
    
    展开全文
  • 因为在Java -13 % 64应该评估为-13,但我得到51。14个解决方案98 votes负数模数的两个定义都在使用 - 一些语言使用一个定义而另一个定义使用另一个定义。如果您想获得负输入的负数,那么您可以使用:int r = x % n;...

    数学 - java如何用负数进行模数计算?

    我做模数错了吗? 因为在Java -13 % 64应该评估为-13,但我得到51。

    14个解决方案

    98 votes

    负数模数的两个定义都在使用 - 一些语言使用一个定义而另一个定义使用另一个定义。

    如果您想获得负输入的负数,那么您可以使用:

    int r = x % n;

    if (r > 0 && x < 0)

    {

    r -= n;

    }

    同样,如果您使用的语言在负面输入上返回负数,您会更喜欢正面:

    int r = x % n;

    if (r < 0)

    {

    r += n;

    }

    Mark Byers answered 2019-09-03T20:08:12Z

    69 votes

    由于“数学上”两者都是正确的:

    -13 % 64 = -13 (on modulus 64)

    -13 % 64 = 51 (on modulus 64)

    其中一个选项必须由Java语言开发人员选择,他们选择:

    结果的符号等于股息的符号。

    在Java规范中说:

    [https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17.3]

    Caner answered 2019-09-03T20:09:01Z

    19 votes

    你确定你在使用Java吗? '因为Java按预期给出-13%64 = -13。 分红的标志!

    Keyxeq answered 2019-09-03T20:09:25Z

    14 votes

    你的结果对Java来说是错误的。请提供一些上下文(您的程序,实现和Java版本)。

    来自Java语言规范

    15.17.3剩余运营商%

    [...]

    二进制数字提升(第5.6.2节)后整数操作数的余数运算产生一个结果值,使得(a / b)* b +(a%b)等于a。

    15.17.2分部操作员/

    [...]

    整数除法向0舍入。

    由于/被舍入为零(导致为零),因此在这种情况下%的结果应为负。

    starblue answered 2019-09-03T20:10:39Z

    5 votes

    您可以使用

    (x % n) - (x < 0 ? n : 0);

    ruslik answered 2019-09-03T20:11:03Z

    3 votes

    你的答案在维基百科:模运算

    它说,在Java中,模运算的符号与被除数的符号相同。 因为我们正在谈论除法运算的其余部分就好了,在你的情况下它会返回-13,因为-13/64 = 0. -13-0 = -13。

    编辑:对不起,误解了你的问题...你是对的,java应该给-13。 你能提供更多周边代码吗?

    Nava Carmon answered 2019-09-03T20:11:40Z

    2 votes

    具有负操作数的模运算由语言设计者定义,语言设计者可能将其留给语言实现,后者可能将定义推迟到CPU体系结构。

    我无法找到Java语言定义。

    感谢Ishtar,剩余运算符的Java语言规范%表示结果的符号与分子的符号相同。

    wallyk answered 2019-09-03T20:12:17Z

    1 votes

    为了克服这一点,你可以将64(或任何你的模数基数)添加到负值,直到它为正

    int k = -13;

    int modbase = 64;

    while (k < 0) {

    k += modbase;

    }

    int result = k % modbase;

    结果仍然在同一个等价类中。

    Andreas answered 2019-09-03T20:12:48Z

    1 votes

    x = x + m = x - m,模数m。

    所以-13 = -13 + 64的模数为64,而-13 = 51的模数为64。

    假设Z = X * d + r,如果0 < r < X然后在Z/X的分区,我们称其余为r。

    Z % X返回剩余的Z/X。

    answered 2019-09-03T20:13:34Z

    1 votes

    mod函数定义为数字超过除数的最大整数倍的数量,该除数不大于该数。 所以在你的情况下

    -13 % 64

    64的最大整数倍不超过-13是-64。 现在,当你从-64减去-13时,它等于51 -13 - (-64) = -13 + 64 = 51

    Salman Paracha answered 2019-09-03T20:14:08Z

    0 votes

    在我的Java JDK版本1.8.0_05 -13%64 = -13

    you could try -13-(int(-13/64))

    in other words do division cast to an integer to get rid of the fraction part

    then subtract from numerator

    So numerator-(int(numerator/denominator)) should give the correct remainder & sign

    Robert Green answered 2019-09-03T20:15:37Z

    0 votes

    在Java最新版本中,您获得-13%64 = -13.答案将始终具有分子的符号。

    vsn harish rayasam answered 2019-09-03T20:16:05Z

    0 votes

    根据JLS的第15.17.3节,“二进制数字提升后整数操作数的余数运算产生的结果值使得(a / b)* b +(a%b)等于a。即使在特殊情况下,这种身份仍然存在,即被除数是其类型的最大可能量值的负整数,且除数为-1(余数为0)。

    希望有所帮助。

    kudesiaji answered 2019-09-03T20:16:39Z

    -1 votes

    在这种情况下,我认为Java不会返回51。 我在Mac上运行Java 8,我得到:

    -13 % 64 = -13

    程序:

    public class Test {

    public static void main(String[] args) {

    int i = -13;

    int j = 64;

    System.out.println(i % j);

    }

    }

    ceprateek answered 2019-09-03T20:17:12Z

    展开全文
  • 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到余数相同。 请问满足上述条件的x的最小值是多少? 数据保证x有解。 输入 一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。 输出 一...
  • 所以如果希望得到运算结果能够保留小数点后面的数,就需要这两个整数至少有一个类型转换为浮点数。 比如: //这里相减是我代码里复制来的逻辑 根据实际情况转型就行了 int numberA = 8; int numberB= 2; //将结果...
  • 展开全部主要的思想是先将这个整数对10求余,636f707962616964757a686964616f31333337396333得到个位数,再将整数除以10得到个位数以外的其余数(除以10之后因为数为int类型所以原先的个位数作为小数被舍去),然后...
  • 输入a,b两个整数,编程求出a除以b得到的商和余数。 输入 输入一行,只有两个整数(中间有空格)。 输出 输出只有一行,两个整数(中间有空格)。 import java.util.Scanner; public class Main{ public static void ...
  • 余数相同问题

    千次阅读 2018-05-06 19:43:11
    现有一个大于1的整数x,将其作为除数分别除a,b,c,得到余数相同。 请问满足上述条件的x的最小值是多少? 数据保证x有解。 输入 一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。 输出...
  • java

    2020-09-03 17:01:36
    方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。 例如:把十进制数 150 转换为 二进制数:如下: 二进制数据转成十进制数据使用8421编码的...
  • java运算符

    2018-08-24 15:11:00
    java运算符 与(&...比如8转二进制,第一次除以2等于4(余数0),第二次除以2等于2(余数0),第三次除以2等于1(余数0),最后余数1,得到余数依次是0 0 0 1 , 反过来就是1000,计算机内部表示数的...
  • Java运算符

    2019-10-22 10:03:03
    比如8转二进制,第一次除以2等于4(余数0),第二次除以2等于2(余数0),第三次除以2等于1(余数0),最后余数1,得到余数依次是0 0 0 1 , 反过来就是1000,计算机内部表示数的字节长度是固定的,比如8位,16位...
  • 自己瞎写的,仅供参考吧,算法:除二倒序取余法public static String getBinary(int num) {int currentNum = num;...//存放余数,也是就二进制数while (currentNum != 0) {if (currentNum % 2 == 0) {list.a...
  • Java 位运算符

    2020-06-06 14:45:08
    第一次除以2等于4(余数1) 第二次除以2等于2(余数0) 第三次除以2等于1(余数0) 最后余数1,得到余数依次为1001,反过来就是1001,Java中二进制(字节码)是8位的,补齐高位00001001 2、二进制转十进制 原理:比如9的...
  • Java学习笔记-Day04 Java运算符一、二进制与十进制之间的转换二、位运算符三、逻辑运算符   一、二进制与十进制之间的转换   (1)十进制转换成二进制   正数的十进制:将十进制数除以2,在下面标出商,在旁边标...
  • java 算数运算符

    2019-09-30 21:37:13
    取模使用 % 符号表示(取模其实就是运算两个数相除得到余数,如果两个数刚好可以整除,则余数就是0) 自加运算符:++ 自加运算表示在原来的基础上 + 1 例如 int a=90; a++; 则此时 a=91 自减运...
  • 浮点数的进制转换主要看看十进制转二进制,整数部分和小数部分分开处理整数部分:整数除以2,得到一个商和余数得到的商继续除以2并得到一个商和一个余数,继续除以2操作直至商为0,上述操作得到一系列余数,从最后...
  • 比如8转二进制,第一次除以2等于4(余数0),第二次除以2等于2(余数0),第三次除以2等于1(余数0),最后余数1,得到余数依次是0 0 0 1 , 反过来就是1000,计算机内部表示数的字节长度是固定的,比如8位,16位...
  • Java进制转换

    2020-10-10 19:02:48
    把之前得到余数按照逆序依次排列,即得到了二进制数字。 例:将十进制的62转换成二进制 0011 1110 即:62的二进制表示为111110,最高位补零得 0011 1110 二进制转十六进制 二进制转十六进制的方法为:十六进制...
  • JAVA移位运算符

    2016-03-09 23:12:38
     在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时...
  • 又例如:a + b四则运算:加:+减:-乘:*除:/取模(取余数):%首先计算得到表达式的结果,然后再打印输出这个结果。复习一下小学一年级的除法公式:被除数 / 除数 = 商 ... 余数对于一个整数的...
  • java作业_Java作业

    2021-03-05 14:30:59
    1:二进制转换成十进制任何一个二进制数的值都用它的按位权展开式表示。例如:将二进制数(10101.11)2转换成十进制数。(10101.11)2=124+023+...即将十进制整数除以2,得到一个商和一个余数;再将商除以2,又得到...
  • Java基础

    2021-04-16 21:58:32
    1.2.3 Java常量优化机制 会在编译的时候让3和4相加,然后自动判断7是否在byte类型取值范围之内,不在范围之内,编译出错。 1.3.1 算数运算符 加减乘 除:整数相除,结果只能是整数,想得到小数就得在过程中有浮点数...
  • 浮点数的进制转换主要看看十进制转二进制,整数部分和小数部分分开处理整数部分:整数除以2,得到一个商和余数得到的商继续除以2并得到一个商和一个余数,继续除以2操作直至商为0,上述操作得到一系列余数,从最后...
  • 常用的运算符分类有:l 算术运算符l 赋值运算符l 比较运算符l 逻辑运算符算术运算符四则运算加(+)减(-)乘(*)除(/),与数学...取余运算如果对于整数的除法,希望得到余数而不是商,那么可以使用取余运算(%)。注意,只...
  • java位运算

    2021-04-24 23:20:15
    再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到余数作为二进制数的低位有效位,后得到余数作为二进制数的高位有效位,依次排列起来 例如: 计算整数52的二进制为 00110100...
  • JAVA笔记

    2021-03-30 20:30:10
    JAVA笔记——运算符1.运算符分类2.算术运算符3.赋值运算符4.比较运算符5.逻辑运算符6.位运算符7.三目运算符运算符面试题 1.运算符分类 a.算术运算符 b.赋值运算符 c.比较运算符 d.逻辑运算符 e.云运算符 f.三目...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 446
精华内容 178
热门标签
关键字:

java得到余数

java 订阅