我正在嘗試撰寫一個列印數字階乘的程式:
#include <iostream>
using namespace std;
int main() {
int ans,fact=1, number;
cin>>number;
for (int i=1; i<=number; i ) {
fact = fact*i;
}
ans = fact%998244353;
cout <<ans<<endl;
return 0;
}
當我嘗試輸入數字 250 時,程式回傳 0,但是當我嘗試列印像 4 這樣的較小數字時,它回傳正確的數字。有誰知道為什么會發生這種情況以及如何解決這個問題?謝謝。
uj5u.com熱心網友回復:
在有限域或環中進行數學運算同時避免溢位的一些提示。
在數學上是正確的:
(a*b)%c == ((a%c)*(b%c))%c
并且:
(a b)%c == ((a%c) (b%c))%c
但在 a*b 或 a b 溢位的情況下,你必須使用右手運算式,因為它不太可能溢位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/443097.html
標籤:C
上一篇:在C 中一行中讀取N個元素
