当前位置: 首页 > 知识库问答 >
问题:

查找大阶乘中特定位数的计数

朱伯寅
2023-03-14

我需要计算特定数字的计数(介于0之间

#include <stdio.h>
int main()
{
    unsigned long long int x;
    int n , count = 0;
    scanf("%llu %d", &x , &n);
    int i = x - 1;
    while(i > 1)
    {
        x *= i;
        i--;
    }
    while (x>0)
    {
        if(x%10 == n) count++;
        x /= 10;
    }
    printf("%d",count);
    return 0;
}

这适用于小数字输入:7 0输出:2描述:7!=5040有两个零,但对于大数字需要很长时间输入:50 2
输出:溢出和时间限制

有什么想法可以在时间方面优化这个程序吗?例如,一种无需计算阶乘即可计算位数的数学方法


共有1个答案

林弘壮
2023-03-14

最后我找到了我的答案,这可能对其他人有帮助。

这个想法是使用大数乘法:

#include<stdio.h>

int main()
{
    int n , p;
    scanf("%d %d" , &n , &p);
    int digits[1000] = {1};
    for(int i = 2 ; i <= n ; i++)
    {
        for(int k = 0 ; k < 1000 ; k++) digits[k] *= i;
        for(int k = 0 ; k < 1000 ; k++) if(digits[k] > 9)
            {
                digits[k+1] += digits[k]/10;
                digits[k] %= 10;
            }
    }
    int a , count = 0;
    for(a = 999 ; !digits[a] ; a--);
    a++;
    for (int j = 0;j<a;j++) if(digits[j] == p) count++;
    printf("%d" , count);
}
 类似资料:
  • 问题内容: 我尝试使用for循环和double数据类型以典型方式找到大量的阶乘,例如8785856。 但是结果显示无限大,可能是因为它超出了其极限。 因此,请引导我找到大量乘数的方法。 我的代码: 输出:- 我是Java的新手,但已经学习了IO处理的所有概念。 问题答案:

  • 一些被测试的数字将导致10000位的阶乘,因此计算这一数字以找到尾随的零似乎是不可能的。如何在不计算阶乘的情况下找到尾随零的数量。

  • 本文向大家介绍用C ++计算阶乘中的位数,包括了用C ++计算阶乘中的位数的使用技巧和注意事项,需要的朋友参考一下 给我们一个整数值,任务是首先计算一个数字的阶乘,然后计算结果中的总位数。 什么是阶乘数 数字的阶乘是通过将数字中的数字相乘,同时将数字的值减1来计算的。它由符号“!”表示 即0!,1!,2!,3!,5!,....等 0阶乘!和1!始终为1。 例如 说明-由于阶乘值6是720并且包含3

  • 假设我们有一个非常大的阶乘,如(10^7)!,有没有一种有效的方法来计算它的精确数字?(Wolfram alpha结果表示(10^7)!有657060位) 当然,我不能通过将值一个接一个地相乘来使用朴素的实现,因为它太慢了,无法评估结果。 我认为这个问题的解决方案最终可能是 如何在不计算阶乘的情况下找到阶乘的位数 如何更有效地计算阶乘(最好是BigInteger或BigDecimal) 我更喜欢1

  • 问题内容: 在这里和Google搜索了几天,并询问了我的编程朋友。不幸的是,我仍然不知道如何更改我的代码… 我的程序计算给定数字的阶乘。然后提供一个数字,该数字代表析因答案包括的位数。然后,将这些数字的值相加,得出总数。 我的程序适用于1之间的任何数字!和31!…如果您输入超过31!(例如50!或100!),它不起作用,只会返回减号而没有总数。 我希望你们能为我指出正确的方向或给我一些建议。我知道

  • 我正在spoj平台上解决任务-计算阶乘中的位数。我找到了Kamenetsky公式并实现了它: 首先,我使用了注释代码(流),因为我认为它比实际代码(没有注释)慢,所以我做了更改,但仍然超过了时间限制。我怎样才能更快? 示例输入为(第一行是测试数): 和预期产出: