厦门网站制作网站建设收费,建站模板网,重庆企业的网站建设,网页设计作业网站题目链接#xff1a;
1.阶乘求和 - 蓝桥云课 (lanqiao.cn)
说明#xff1a;
说难也不难#xff0c;说简单也不简单#xff0c;就是考你敏不敏锐。想到末尾位数为0加起来就不影响了#xff0c;以及阶乘里产生一个10就多一个0就很容易了。
还有蓝桥杯常考的#xff1a;…题目链接
1.阶乘求和 - 蓝桥云课 (lanqiao.cn)
说明
说难也不难说简单也不简单就是考你敏不敏锐。想到末尾位数为0加起来就不影响了以及阶乘里产生一个10就多一个0就很容易了。
还有蓝桥杯常考的为了防溢出不断取余的思想。这里我考虑到了累加取余但是没考虑到求阶乘的时候也要取余不然的话阶乘就太大了会溢出。
为什么求阶乘的时候也能取余而不影响结果呢因为我们只关注末尾九位数的情况做乘法的时候而影响结果末尾9位的就是两个乘数的末尾九位看注释想象一下手算乘法的方式。
还有一个地方就是求阶乘的时候不要重复从1开始求求i的阶乘直接利用i-1的阶乘结果*i。这些细节都需要注意把得到的信息利用起来。
代码
#includebits/stdc.h
#define int long long
using namespace std;
const int N1e9;//注意9个0就是10位数了
int ans0;//1到40刚好能组合出9个02*51015*一个偶数2025*4两个03035*一个偶数40
//只需要计算到39就可以后面的阶乘都有9个0对末尾9个数无影响
signed main() {cin.tie(0);cout.tie(0);int sum0;int m1; for(int i1;i39;i){mm*i;//对于乘法来说影响结果末尾9个数的肯定只有 该被乘数的末9位想象一下手算乘法的方式// XX123456789 被乘数 //* 11 以11为例一个两位的乘数因为在本题中只到两位//———————— // XX123456789//XX123456789//————————// 结果末尾9位只被乘数和两位数的乘数的末9位影响 //所以每一次对某数的阶乘 取9位数 的余 mm%1000000000ll;sum(summ)%1000000000ll;}coutsum%1000000000ll;return 0;
}