51Nod 大数阶乘、大数取模

2019-04-14 19:33发布

1057 N的阶乘 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 输入N求N的阶乘的准确值。 Input 输入N(1 <= N <= 10000) Output 输出N的阶乘 Input示例 5 Output示例 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; } 1008 N的阶乘 mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)例如:n = 10, P = 11,10! = 36288003628800 % 11 = 10 Input 两个数N,P,中间用空格隔开。(N < 10000, P < 10^9) Output 输出N! mod P的结果。 Input示例 10 11 Output示例 10#include typedef 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; }