假設我有兩個long long,a和b,我需要相乘,然後得到值k對於一些大的k,這樣a,b和k都在long long的範圍內,但不是int 。爲簡單起見,a,b < k。在C++中int(或long long)溢出如何影響模數?
因此,代碼將是:
long long a, b, k;
cin >> a >> b >> k;
cout << (a * b)%k << "\n";
然而,因爲a,b是如此之大,如果乘像上面,並且溢出和變爲負,則模k將是一個負數和不正確。
如何確保值mod k是正確的?
編輯:作爲獎金,這是如何在Java中工作?是否如預期的那樣?還是BigInteger需要?
查看http://stackoverflow.com/questions/4240748/allowing-signed-integer-overflows-in-c-c – juanchopanza
a,b
nneonneo
嘗試使用(a * b)%k ==((a%k)*(b%k))%k的事實。如果k小於long,這將起作用。如果沒有,你將需要做一些簡單的多精度。 –