我需要计算特定数字的计数(介于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
输出:溢出和时间限制
有什么想法可以在时间方面优化这个程序吗?例如,一种无需计算阶乘即可计算位数的数学方法
最后我找到了我的答案,这可能对其他人有帮助。
这个想法是使用大数乘法:
#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公式并实现了它: 首先,我使用了注释代码(流),因为我认为它比实际代码(没有注释)慢,所以我做了更改,但仍然超过了时间限制。我怎样才能更快? 示例输入为(第一行是测试数): 和预期产出: