3-11阶乘和加强版难度系数2 阶乘和 (10 分)

计算阶乘和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;    
while(scanf("%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;
}

大一新生,卑微做题。
取余的方法来源与百度。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值