c中阶乘中尾随零的数量
Number of Trailing Zeros in a Factorial in c
我是 C 编程新手
我想找出给定数字
的阶乘中尾随零的数量
{
long int n=0,facto=1,ln=0;
int zcount=0,i=1;
printf("Enter a number:");
scanf("%ld",&n);
if(n==0)
{
facto=1;
}
else
{
for(i=1;i<=n;i++)
{
facto=facto*i;
}
}
printf("%ld",facto);
while(facto>0)
{
ln=facto%10;
facto/10;
if(ln=!0)
{
break;
}
else
{
zcount+=1;
}
}
printf("Tere are Total %d Trailing zeros in given factorial",zcount);
}
我试图计算数字的模数,它将 return 给定数字的最后一位作为余数,然后 n/10;
将删除最后一个数字。
执行程序后,输出总是显示尾随零的数量为“0”,即使有零,条件 if(ln =! 0)
也总是得到满足。
这个
if(ln=!0)
表示 ln = !0
即您将 !0
分配给 ln
因此条件始终为真,将其更改为
if (ln != 0)
您可以使用赋值作为真值,但前提是您确定自己正在这样做。
为防止意外执行,请打开编译器警告。
中的正确语法
if(ln!=0)
{
// do something
}
在 if ( ln=!0 )
中,首先评估 !0
然后 =
将 !0
(即 1
)分配给 ln
,然后 if
检查 ln
的值,如果该值不为零(在这种情况下,由于先前的赋值,它是 1
)然后执行 break
语句。
此外,此方法不适用于大于 25 的数字。
显然n!
中5的次方就是答案
下面的表达式给出了 n!
中素数 p
的幂:-
f(n/p) + f(n/p^2) + f(n/p^3) + ..... (until f(n/p^k) return zero
,其中 f(a)
returns a
的最大整数或 a
的底数
{
long int n=0,facto=1,ln=0;
int zcount=0,i=1;
printf("Enter a number:");
scanf("%ld",&n);
if(n==0)
{
facto=1;
}
else
{
for(i=1;i<=n;i++)
{
facto=facto*i;
}
}
printf("%ld\n",facto);
while(facto>0)
{
ln=(facto%10);
facto/=10; //here you done one mistake
if(ln!=0) //another one here
{
break;
}
else
{
zcount+=1;
}
}
printf("Tere are Total %d Trailing zeros in given factorial",zcount);
}
/运行 这段代码现在可以工作了,我猜你已经知道的错误/
让我们记住数学(wiki):
int trailingZeroCountInFactorial(int n)
{
int result = 0;
for (int i = 5; i <= n; i *= 5)
{
result += n / i;
if(i > INT_MAX / 5) // prevent integer overflow
break;
}
return result;
}
package lb;
import java.util.Scanner;
public class l1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int a=n/5;
if(a<5)
{
System.out.println(a);
}
else
{
int c=a/5+a;
System.out.println(c);
}
}
}
试试这个
int trailingZeroCountInFactorial(int n)
{
int result = 0;
for (int i = 5; i <= n; i *= 5)
{
result += n / i;
}
return result;
}
要学习,它是如何工作的,有很好的解释here
我已经解决了这类问题,我认为你的问题只是找到阶乘数的尾随零的数量 比如 - 15! = 1307674368000 if you look at the trailing 3 digits which are 000
Efficient code is
int n;cin>>n;
int ans = 0;
while(n)
{ ans += (n = n/5);}
cout<<ans;
这里应该寻找 int 溢出,数组边界。另外,特殊情况是 n=1?
我是 C 编程新手 我想找出给定数字
的阶乘中尾随零的数量{
long int n=0,facto=1,ln=0;
int zcount=0,i=1;
printf("Enter a number:");
scanf("%ld",&n);
if(n==0)
{
facto=1;
}
else
{
for(i=1;i<=n;i++)
{
facto=facto*i;
}
}
printf("%ld",facto);
while(facto>0)
{
ln=facto%10;
facto/10;
if(ln=!0)
{
break;
}
else
{
zcount+=1;
}
}
printf("Tere are Total %d Trailing zeros in given factorial",zcount);
}
我试图计算数字的模数,它将 return 给定数字的最后一位作为余数,然后 n/10;
将删除最后一个数字。
执行程序后,输出总是显示尾随零的数量为“0”,即使有零,条件 if(ln =! 0)
也总是得到满足。
这个
if(ln=!0)
表示 ln = !0
即您将 !0
分配给 ln
因此条件始终为真,将其更改为
if (ln != 0)
您可以使用赋值作为真值,但前提是您确定自己正在这样做。
为防止意外执行,请打开编译器警告。
if(ln!=0)
{
// do something
}
在 if ( ln=!0 )
中,首先评估 !0
然后 =
将 !0
(即 1
)分配给 ln
,然后 if
检查 ln
的值,如果该值不为零(在这种情况下,由于先前的赋值,它是 1
)然后执行 break
语句。
此外,此方法不适用于大于 25 的数字。
显然n!
中5的次方就是答案
下面的表达式给出了 n!
中素数 p
的幂:-
f(n/p) + f(n/p^2) + f(n/p^3) + ..... (until f(n/p^k) return zero
,其中 f(a)
returns a
的最大整数或 a
{
long int n=0,facto=1,ln=0;
int zcount=0,i=1;
printf("Enter a number:");
scanf("%ld",&n);
if(n==0)
{
facto=1;
}
else
{
for(i=1;i<=n;i++)
{
facto=facto*i;
}
}
printf("%ld\n",facto);
while(facto>0)
{
ln=(facto%10);
facto/=10; //here you done one mistake
if(ln!=0) //another one here
{
break;
}
else
{
zcount+=1;
}
}
printf("Tere are Total %d Trailing zeros in given factorial",zcount);
} /运行 这段代码现在可以工作了,我猜你已经知道的错误/
让我们记住数学(wiki):
int trailingZeroCountInFactorial(int n)
{
int result = 0;
for (int i = 5; i <= n; i *= 5)
{
result += n / i;
if(i > INT_MAX / 5) // prevent integer overflow
break;
}
return result;
}
package lb;
import java.util.Scanner;
public class l1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int a=n/5;
if(a<5)
{
System.out.println(a);
}
else
{
int c=a/5+a;
System.out.println(c);
}
}
}
试试这个
int trailingZeroCountInFactorial(int n)
{
int result = 0;
for (int i = 5; i <= n; i *= 5)
{
result += n / i;
}
return result;
}
要学习,它是如何工作的,有很好的解释here
我已经解决了这类问题,我认为你的问题只是找到阶乘数的尾随零的数量 比如 - 15! = 1307674368000 if you look at the trailing 3 digits which are 000
Efficient code is
int n;cin>>n;
int ans = 0;
while(n)
{ ans += (n = n/5);}
cout<<ans;
这里应该寻找 int 溢出,数组边界。另外,特殊情况是 n=1?