jjzjj

java - 我如何处理非负面模组?

当我在我的Java程序中使用运算符%时,我总是得到否定的答案。示例:-1%100给出-1。虽然这在数学上是正确的,但我想得到正常的数学解,即99。换句话说,我想得到最小的正整数解。在Java中是否有任何简单的解决方案(也许是我在数学中忽略的东西?——我找不到)?我还想澄清一下,如果API中有某些东西可以执行此操作,那么链接会很棒。 最佳答案 你能做到吗?intd=100;intx=-1%d;if(x这应该适用于任何正的d。 关于java-我如何处理非负面模组?,我们在StackOverf

java - 模数不起作用

我知道这看起来是一个非常愚蠢的问题,但我只是不明白为什么这不起作用。这:System.out.println(5%.10);它正在返回:0.09999999999999973我真的不知道。我只是在学习Java,而且我对C#相当擅长,所以我尝试使用C#来。C#似乎也返回同样的东西。 最佳答案 正如其他人所解释的,这是由于浮点精度导致的不准确。你应该使用BigDecimal,在本例中为remaindermethod用于涉及小数的精确算术。BigDecimalnumber=newBigDecimal(5);BigDecimaldiviso

java - 如何在 Java 中对 long 进行 mod2^64?

我正在用Java实现Skein散列函数,但我遇到了一个问题,其中一些添加项对2^64取模。据我所知,long在java中的最大值=2^63-1。所以我的问题是,如何实现这个模运算。(Skein中的所有操作都针对64位字。) 最佳答案 Java中的long是64位的,因此所有操作都已经是mod2^64。您无需执行任何额外操作即可实现这一目标。问题是您不知道如何处理有符号值吗?这是您想要的还是您试图避免的? 关于java-如何在Java中对long进行mod2^64?,我们在StackOve

java - 快速乘法和减法取模素数

我需要优化一些代码,我将整数vector(32位)乘以标量模p(其中p是质数(2^32)-5),然后从另一个vector模p中减去该vector.代码如下所示:publicstaticvoidmultiplyAndSubtract(longfragmentCoefficient,long[]equationToSubtractFrom,long[]equationToSubtract){for(inti=0;i我使用longs是因为Java不支持无符号整数,但是两个vector都是modp所以你可以期望每个数字都是0有什么优化的想法吗?modp操作占用了大部分执行时间,因此优化它的一种

java - 如何在没有字符串或数组的情况下按升序对整数数字进行排序?

我试图在不使用字符串、数组或递归的情况下对任意长度的整数的数字进行升序排序。例子:Input:451467Output:144567我已经想出了如何用模数除法得到整数的每一位:intnumber=4214;while(number>0){IO.println(number%10);number=number/10;}但我不知道如何在没有数组的情况下对数字进行排序。不用担心IO类;这是我们教授给我们的定制类(class)。 最佳答案 它是4行,基于while循环的for循环变体和一点java8spice:intnumber=4214;

java - 为什么在 java src 中 Integer 类的 toString 方法中使用负 int 进行 mod 操作

我在看java1.7.0_09版本的源码时,发现Integer类的toString方法的实现是用负int来计算模运算,有什么意义吗?代码如下:publicstaticStringtoString(inti,intradix){if(radixCharacter.MAX_RADIX)radix=10;/*Usethefasterversion*/if(radix==10){returntoString(i);}charbuf[]=newchar[33];booleannegative=(i 最佳答案 根据该算法,您需要一个小的()非负

c++ - 将浮点除法分解为整数和小数部分

我正在尝试使用double进行整数除法+模运算(用于基于样条的插值),但是在使用std::floor和std::fmod.我一直在使用下面的div1的等价物,但是在50时它产生了不正确的结果(也就是说,整数部分是3,但模数部分是除数减去epsilon)。div2有效但相当复杂。div3至少是一致的,但没有返回我想要的结果类型(余数可能是负数,所以在我可以使用它之前需要进一步的操作)。#include#includestd::pairdiv1(intnum,doubledenom){doublewhole=std::floor(num/denom);doubleremain=std::f

c++ - 如何避免在 std::modf 中使用临时变量?

我最近遇到了一个问题,我在MSVC中遇到了段错误,而在GCC中却不会。几小时后我意识到我的MSVC版本显然不支持以下语法:doublevalue=3.4;doublefractional=std::modf(value,nullptr);我不想/关心数字的全部部分。是的,我知道我可以做“3.4-3.0”之类的,但我担心以这种方式专门使用modf。目前我只能通过以下方式看到这样做:doubletemp;doublevalue=3.4;doublefractional=std::modf(value,&temp);有没有办法绕过这个临时变量? 最佳答案

c++ - C/C++大数计算

我正在尝试在C程序中计算以下数字:result=(3*pow(2,500000000)-2)%10000000002的幂太大而无法正确处理=>我的印象是我可以使用模数将计算分成许多步骤以减小结果大小。有人有这样做的策略吗?还有其他想法吗?提前致谢手册 最佳答案 最简单的方法是通过重复平方减去每一步中的模数来取幂。unsignedlonglongmod_pow(unsignedlonglongbase,unsignedlonglongexponent,unsignedlonglongmodulus){if(exponent==0)re

c++ - 编译时(constexpr)浮点模?

考虑以下在编译时根据参数类型计算整数或浮点模数的函数:templateconstexprTmodulo(constTx,constTy){return(std::is_floating_point::value)?(x((x/y::value,int,T>::type>(x)%static_cast::value,int,T>::type>(y));}这个函数的主体可以改进吗?(我需要为整数和浮点类型提供一个函数)。 最佳答案 这是清理它的一种方法:#include#includetemplate//integral?floatin