当前位置:编程学习 > C/C++ >>

C或者C++怎么求100的阶乘(代码)

C或者C++怎么求100的阶乘(代码)
追问:我是100的阶乘啊!int能存的下吗?

答案:方法很多,给一个最好理解的

使用数组保存100阶乘

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int calc(unsigned int n);/*计算N的阶乘,返回第一位非零数字*/
int count=0;//记录有多少个0
int main(void)
{
 int i;
 i=calc(100);//最大可以求5000的阶乘
 cout<<"最后0的个数:"<<count<<endl;
 cout<<"第一个不为0的数是:"<<i<<endl;
 system("PAUSE");
 return 0;
}
int calc(unsigned int n)/*注意,返回的是第一个非零数字*/
{
 const int max = 10000;/*数组中每个元素存储的数据不超过max*/
 int array[5000];/*用该个数组存储数据*/
 int arrayNow = 0;/*标记数组用到了第几位*/
 unsigned int num=1;/*计算阶乘用*/
 int first=0;/*用于记录首个非零数*/
 int i,j,temp;
 int left;/*进位相加数*/
 char out[8];
 
 memset(array,0,5000*sizeof(int));/*初始化数组*/
 if(n<3)/*小于3就不计算了*/
 {
  return n; 
 }
 if(n>5000)
 {
  return -1; 
 }
 
 array[0] = 1;
 while(num<=n)//写入阶乘到数组
 {
  left = 0;/*第0位没有上一位进位*/
  for(i=0;i<=arrayNow;i++)/*有记录的数组位置都需要乘num*/
  {
   temp = array[i]*(int)num;/*当前数组元素与num相乘*/
   temp+=left;              /*加上上一个元素的进位*/
   array[i] = temp%max;/*记录当前元素*/
   left = temp/max;/*记录进位*/
   
   if(num==n && 0 == first && array[i]!=0)/*最后一趟乘法时进行查找第一个非零数字*/
   {
    temp = array[i];
    while(0 == first)/*找当前元素的非零数字*/
    {
     first=temp%10;
     temp/=10;
    }
   }
  } 
  if(left>0)/*填充新位*/
  {
   array[++arrayNow] = left;
  }
  num++;
 }
 for(j=0;j<=n;j++)//计算0的个数
 {
  int a=0,b=array[j];
  if(array[j]==0)
   count+=4;
  else
   do
   {
    a=b%10;
    if(a==0)
    {
     count++;
     b=b/10;
    }
    else
     break;
   }
   while(a%10==0);
   if(a!=0)break;
 }
 
 for(i=arrayNow;i>=0;i--)
 {
  if(array[i]>=max)
  {
   printf("出错\n");
   return -1; 
  } 
  if(i==arrayNow)
  {
   printf("%d",array[i]);
  } 
  else
  {
   printf("%d",array[i]/1000);
   printf("%d",array[i]/100 - (array[i]/1000)*10);
   printf("%d",(array[i]%100)/10);
   printf("%d",array[i]%10);
  }
 }
 printf("\n");
 return first;/*返回*/
}

给你一个函数,应该能看懂吧

long factorial(int n) {
   int a=1;

   int i;
   for(i=1;i<=n;i++)  a*=i;
   return a;
 }

上一个:[c++]推荐一个可以读写EXCEL的方法!
下一个:C++,如何获取程序窗口外的鼠标位置

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,