优秀的编程知识分享平台

网站首页 > 技术文章 正文

小猴编程C++ | 很难的题目(小猴编程下载)

nanyue 2024-07-30 03:12:20 技术文章 5 ℃

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】

小A非常喜欢信息学竞赛,平时的课余时间总是用来研究一些题目。

一天小A遇到了一道他认为很难的题目。

现在记f(x)为x的十进制数码乘积,例如f(666)=6×6×6=216,f(101)=1×0×1=0。

给出两个整数l,r,算出f(lf(l+1)×……×f(r)的结果。题目包含多组数据

小A记得自己只学过十进制数码和函数,并没有学过乘积,所以一时间没有头绪,他希望聪明的你能帮他解决这个问题。

由于f(lf(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

Tags:

最近发表
标签列表