计算阶乘和Sum= 1!+2!+…+n! 对1000000007求模的结果不含前导0)。
输入格式:
输入若干个整数 ,其中每个整数 N ,满足1<=N<=20000000。
输出格式:
输出对应各个整数的阶乘和对1000000007求模的结果,每个一行,最后一行后面一样有换行符。
输入样例:
在这里给出一组输入。例如:
因为在求阶乘的过程中会产生很大的数,会溢出,所以不能将每次阶乘的结果都存放在变量中,而是要在求阶乘的过程中就取余。
原理:
1. a*b) mod c = a mod c) * b mod c)
2. a+b) mod c = a mod c) +b mod c)
// 2019/11/24 第一篇博客#include<stdio.h>int main){ int N; whilescanf”%d”,&N)!=EOF) { long long fact=1,sum=1; for int i =2; i<=N; i++) { fact=fact*i)%1000000007;//由原理一可知,阶乘的结果每次都保存,不用再算一遍 .由原理1 ,可以把每次相乘后都对1000000007取余 sum=fact+sum)%1000000007;//由原理二可知 ,阶乘和的结果对1000000007取余可以每次对1000000007取余后再加入sum中 } printf”%lld\n”,sum); } return 0;}
大一wydxbw,卑微做题。
取余的方法来源与百度。