本文主要是介绍阶乘取模,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Description
计算
(0! + 1! + 2! + 3! + 4! + ... + n!)%m
Input
第一行输入t,表示测试数据组数
每组数据输入两个数n和m0 < T <= 20
0 <= n < 10^100 (没有前导零)
0 < m < 1000000
Output
输出(0! + 1! + 2! + 3! + 4! + ... + n!)%m的答案
Sample Input
1
10 861017
Sample Output
593846
这道题注意的是每次运算都要取模,不然会很大,会数据溢出。
参考代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
using
namespace
std;
int
main()
{
__int64
i,s,t,m,n,temp;
char
c[110];
scanf
(
"%I64d"
,&t);
while
(t--)
{
n=0;
temp=s=1;
scanf
(
"%s"
,c);
scanf
(
"%I64d"
,&m);
if
(
strlen
(c)>7)
n=m;
else
for
(i=0;i<
strlen
(c);i++)
n=10*n+c[i]-
'0'
;
if
(n>m)
n=m;
for
(i=1;i<=n;i++)
{
temp*=i;
temp%=m;
s+=temp;
s%=m;
}
printf
(
"%I64d\n"
,s%m);
}
return
0;
}
更多做题心得的详情请查看(记得关注哦)https://mp.weixin.qq.com/s?__biz=MzIyOTM4MDMxNw==&mid=2247483798&idx=1&sn=d4fbd34e50ce4efda39d7710d2dc5dc9&chksm=e842d824df3551320d7f1ed85286b2616aec419f7a852cc5c9c9f270beb237b5e6ca83166162&token=1630951018&lang=zh_CN#rd
这篇关于阶乘取模的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!