题目描述】
小 S 最近学到了“阶乘”的概念,想要考一考来参加 NOIP 的你。他知道你可能不清楚这是用来做什么的,所以他十分良心地告诉了你什么叫阶乘:
- 只有非负整数能够计算阶乘。
- 0 的阶乘是 1。
- 对于正整数 x,我们通过连乘 x(x−1)(x−2)⋯ 的方式计算 x的阶乘,直到被乘的一项为 0 则停止这个过程。
- 例如,6 的阶乘为 6×5×4×3×2×1=720。
那么,请看好他要问你的问题:
输入非负整数 a 与正整数 b,请你计算 a 的阶乘,除以 b 所得的余数。
【输入格式】
从标准输入读入数据。
输入共两行,第一行输入 a,第二行输入 b。
【输出格式】
输出到标准输出。
输出共一行,仅包含一个数,即所求的答案
#include<bits/stdc++.h>
using namespace std;
long long a,b;
int w(long long n){
if(n==0){
return 1;
}else{
return n*w(n-1)%b;
}
}
int main(){
ios::sync_with_stdio(0);
std::cin.tie(0);
cin>>a>>b;
if(a>=b){
cout<<"0";
}
else{
long long q=w(a)%b;
cout<<q;
}
return 0;
}
数据量大需要边乘边摸,且当a>=b时阶乘内包含b直接输出0