学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
小A非常喜欢信息学竞赛,平时的课余时间总是用来研究一些题目。
一天小A遇到了一道他认为很难的题目。
现在记f(x)为x的十进制数码乘积,例如f(666)=6×6×6=216,f(101)=1×0×1=0。
给出两个整数l,r,算出f(l)×f(l+1)×……×f(r)的结果。题目包含多组数据
小A记得自己只学过十进制数码和函数,并没有学过乘积,所以一时间没有头绪,他希望聪明的你能帮他解决这个问题。
由于f(l)×f(l+1)×……×f(r)这个乘积有可能很大,你只需要输出这个乘积除以10^9+7的余数即可。
【输入】
第一行为一个正整数T,表示一共有T组数据。
每组数据一行:包含两个正整数l,r。
【输出】
输出T行,对每组数据,用一行输出所要求的乘积。
【输入样例】
2
1 8
98 99
【输出样例】
40320
5832
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int t, l, r;
long long ans;
long long f(int x)
{
long long mul = 1;
while (x!=0) {
mul *= x%10;
x /= 10;
// cout << "mul " << mul << endl;
}
return mul;
}
int main()
{
cin >> t;
for (int i=1; i<=t; i++) {
cin >> l >> r;
if (r-l>=10) { // 如果l与r之间有10个数字,一定有个数字的个位为0,则乘积就为0
cout << 0 << endl;
continue;
}
ans = 1;
for (int j=l; j<=r; j++) {
ans = (ans% 1000000007) * f(j) % 1000000007 ;
// cout << "ans " << ans << endl;
}
cout << ans << endl;
}
return 0;
}
【运行结果】
2
1 8
40320
98 99
5832