C语言编程题(阶乘+尾数几个零)
求大侠帮忙编一段程序要求是这样的给你个进制数b和一个数n你能求出这个数化成相应的进制数后末尾有几个零比如给个25答案出来就是3具体思路如下不要去算n!稍微大一点就越界的....
求大侠帮忙编一段程序 要求是这样的 给你个进制数b和一个数n 你能求出这个数化成相应的进制数后末尾有几个零 比如给个 2 5 答案出来就是3
具体思路如下
不要去算n!
稍微大一点就越界的.
例如求12进制的n!末尾有几个0,先分解因数12=3*2*2, 就是说12的因数有3和2
然后设置两个2变量,记录从1到n中整除3和2的个数!例如出现24的时候,24=3*2*2*2, 那么对记录3的那个变量+1, 对2的那个变量+2(因为有3个因子),然后都统计出来.然后看记录3的那个变量假设是10, 2的那个变量记录的是25, 就是说n!中有一部分分解是3^10*2^25, 然后看这个数能整除多少个12就行了.明显的,这个数有10个3, 25个2, 10个3能整除12中3这个因子10次, 25个2能整除12中2这个引子12次, 所以总体上能整除12共10次,所以末尾应该是10个0
还希望请高手指点下 把这段文字用C语言编出来 不要太高深了谢谢噢 不胜感激
发到邮箱 450103730@qq.com 谢谢 展开
具体思路如下
不要去算n!
稍微大一点就越界的.
例如求12进制的n!末尾有几个0,先分解因数12=3*2*2, 就是说12的因数有3和2
然后设置两个2变量,记录从1到n中整除3和2的个数!例如出现24的时候,24=3*2*2*2, 那么对记录3的那个变量+1, 对2的那个变量+2(因为有3个因子),然后都统计出来.然后看记录3的那个变量假设是10, 2的那个变量记录的是25, 就是说n!中有一部分分解是3^10*2^25, 然后看这个数能整除多少个12就行了.明显的,这个数有10个3, 25个2, 10个3能整除12中3这个因子10次, 25个2能整除12中2这个引子12次, 所以总体上能整除12共10次,所以末尾应该是10个0
还希望请高手指点下 把这段文字用C语言编出来 不要太高深了谢谢噢 不胜感激
发到邮箱 450103730@qq.com 谢谢 展开
展开全部
#include<stdio.h>
void main()
{
int b,n;
int temp[20];
int i=2,j=0,k;
int yinziNum[20];
cout<<"请输入一个进制数和一个整数:"<<endl;
cin>>b>>n;
if(b%2==0)
while(b%i==0)
{
while(b%i==0)
{temp[j]=i;
b=b/i;}
i++;
if(b%i==0)
j++;
}
for(i=2;i<=n;i++)
for(k=0;k<=j;k++)
while(i%temp[k]==0&&i!=0)
{yinziNum[k]++;
i=i/temp[k];}
min=yinziNum[0];
for(i=1;i<k;i++)
if(yinziNum[i]<min)
min=yinziNum[i];
cout<<b<<"进制数"<<n<<"的阶乘末尾共有"<<min<<"个零!"<<endl;
}
void main()
{
int b,n;
int temp[20];
int i=2,j=0,k;
int yinziNum[20];
cout<<"请输入一个进制数和一个整数:"<<endl;
cin>>b>>n;
if(b%2==0)
while(b%i==0)
{
while(b%i==0)
{temp[j]=i;
b=b/i;}
i++;
if(b%i==0)
j++;
}
for(i=2;i<=n;i++)
for(k=0;k<=j;k++)
while(i%temp[k]==0&&i!=0)
{yinziNum[k]++;
i=i/temp[k];}
min=yinziNum[0];
for(i=1;i<k;i++)
if(yinziNum[i]<min)
min=yinziNum[i];
cout<<b<<"进制数"<<n<<"的阶乘末尾共有"<<min<<"个零!"<<endl;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询