两个答案(25和-1)都有效.只是不同的系统有不同的约定.
我认为最常见的(数学)是:
quotient = floor(x / y)
remainder = x - quotient * y
Run Code Online (Sandbox Code Playgroud)
floor()向负无穷大方向转向何处.
这是您的计算器给您的约定.(Mathematica也使用这个惯例.)
我认为大多数编程语言使用的是:
quotient = integerpart(x / y)
remainder = x - quotient * y
Run Code Online (Sandbox Code Playgroud)
其中integerpart()相同的(浮- >整数)的流延.(向零舍入)
一些惯例喜欢将余数保持为与其中一个操作数相同的符号.
同样的事情适用于分隔符的符号.不同的惯例是不同的.
"怎么会 ... ?"
模运算有两种常见的定义.Java选择了一个("与分红相同的符号"),计算器实现另一个; 可能是"与除数相同的符号",尽管你需要做一些实验才能确定.
事实上,模数操作的维基百科页面给出了不同编程语言使用的4种不同的运算符定义.(有些编程语言为您提供了两个具有不同语义的运算符.)
在C的情况下,定义取决于您所谈论的C标准的版本.对于ISO C 1999,模运算符遵循与Java相同的定义.对于早期版本C标准的,语义%是依赖于实现
"两者之间有区别吗?"
显然有!
"我需要一个像计算器一样解决它的程序."
随意写一个:-).
但是如果你只是想知道如何在Java中获得与模数相同的"除数"形式,这里有一种方法:
int otherModulus = (a % b) + (a < 0 ? b : 0); // works for b > 0.
int otherModulus = (a % b) + // works for b != 0
(b > 0 ? (a < 0 ? b : 0) : (a > 0 ? -b : 0));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |