當我在我的Java程序中使用運算符%時,我不斷收到負面答案。例如:-1%100給出-1。雖然這在數學上是正確的,但我想得到正常的數學解或99.換句話說,我想得到最小的正整數解。在Java中有沒有簡單的解決方案(可能是我在數學中忽略的東西? - 我無法找到它)?我該如何處理非負面的mods?
我也想澄清一下,如果API中有什麼東西可以做到這一點,那麼鏈接就會很棒。
當我在我的Java程序中使用運算符%時,我不斷收到負面答案。例如:-1%100給出-1。雖然這在數學上是正確的,但我想得到正常的數學解或99.換句話說,我想得到最小的正整數解。在Java中有沒有簡單的解決方案(可能是我在數學中忽略的東西? - 我無法找到它)?我該如何處理非負面的mods?
我也想澄清一下,如果API中有什麼東西可以做到這一點,那麼鏈接就會很棒。
你可以做以下
int myMod(int x, int modulo)
{
return ((x % modulo) + modulo) % modulo
}
這不起作用。如果'x = -201'和'modulo = 100'會怎麼樣。 – Mysticial
好點。更新。 –
這工作,對任何值代替d或x。
int d=100;
int x=-1%d;
while (x<0)
x+=d;
你剛剛複製我的答案並更改格式? (編輯:沒關係,你把'if'改成了'while'。請參閱我的回答中的評論...) – Mysticial
i < 0 ? n - ((-i - 1) % n + 1) : i % n
例如:
class Mod {
public static int mod(int i, int n) {
return i < 0 ? n - ((-i - 1) % n + 1) : i % n;
}
public static void main(String [] args) {
System.out.println("mod(-201, 100) == " + mod(-201, 100));
System.out.println("mod(-200, 100) == " + mod(-200, 100));
System.out.println("mod(17, 100) == " + mod(17, 100));
System.out.println("mod(100, 100) == " + mod(100, 100));
}
}
而且
$ javac Mod.java && java Mod
mod(-201, 100) == 99
mod(-200, 100) == 0
mod(17, 100) == 17
mod(100, 100) == 0
沒有循環。
如果i%n爲0且i <0,則這不起作用;例如mod(-200,100)== 100而不是0. –
@LajosMolnar固定,謝謝。 – phs
數學上正確的解決方案***是***正常的數學解決方案。你沒有清楚地問你的問題,但聽起來你想在變形之前取得變量的絕對值。 – Perception
@Perception,他意味着他想要在除法算法的意義上劃分餘數。也就是說,他想要一個介於0到99之間的解決方案。大多數數學家(與計算機科學家不同)認爲這是剩餘的更有意義的概念。 – Hammerite
作爲最不積極的整數解決方案,我一直把它作爲數學課。而且,-1 mod 100!= 1 mod 100.這就是你的意思? – varatis