本文共 1060 字,大约阅读时间需要 3 分钟。
输入N(1 <= N <= 10000)
输出N的阶乘
5
120
#include#define MAX 1000000+5 using namespace std;int a[MAX];int main() { int n; scanf("%d",&n); int carry,cnt = 0; a[0] = 1;//别忘记初始化 for(int i = 2; i <= n; ++i){ carry = 0; for(int j = 0; j <= cnt; ++j){ a[j] = a[j]*i+carry; // 模拟 手算每次 先乘 后加上进位(而不是加上进位后乘) carry = a[j]/10000; a[j] %= 10000; } if(carry)//注意 如果 最后有进位的情况 a[++cnt] = carry; } //输出要注意每组是4位(最高的一组单独处理) 其余的需要考虑0的情况输出 printf("%d",a[cnt]); for(int i = cnt-1; i >= 0; --i){ printf("%04d",a[i]); } return 0; }
两个数N,P,中间用空格隔开。(N < 10000, P < 10^9)
输出N! mod P的结果。
10 11
10
#includetypedef long long ll; int main() { int n,p; scanf("%d%d",&n,&p); ll ans = 1; for(int i = 1; i <= n; ++i){ ans = ans*i%p;//利用 (a*b)%c = (a%c*b)%c } printf("%d",ans); return 0; }
转载地址:http://jeimi.baihongyu.com/