當前位置:編程學習大全網 - 編程語言 - 求n! 編寫壹個c語言程序,不要c++,可以求壹個大數n的階乘(n!),n的值範圍從1~100之間變化。

求n! 編寫壹個c語言程序,不要c++,可以求壹個大數n的階乘(n!),n的值範圍從1~100之間變化。

#include<iostream>

#define MAX 1001 //1001表示這個大數N的階層結果最多只能是1000位,註意 下面的程序是從a[1]開始存數

using namespace std;

/**************

*計算N的階乘

**************

*/

int jisuan(int n,int a[])

{

int i,j; //flag 用來存儲計算結果 除以 4 的余數;

int carry,digit; //digit存儲當前結果的位數,carry為進位

a[1]=1; //初始化第壹位為1,因為最開始是 1,去乘2,3,······n

digit=1; //最開始 只有壹位數--1

for(i=2;i<=n;i++) //循環與2,3,4.....n相乘

{

for(j=1,carry=0;j<=digit;j++) //讓a[]的每位與i相乘

{

a[j]=a[j]*i+carry;

carry=a[j]/10;

a[j]=a[j]%10;

}

while(carry>0) //計算壹輪後,還得檢驗carry的值,如果carry不為0 ,繼續進位

{

a[j]=carry%10;

carry=carry/10;

j++;

}

digit=j-1; //計算壹輪後,將當前的位數賦給digit

}

return digit;

}

/**************

*按格式輸出N的階乘

**************

*/

void shuchu(int digit2,int a[])

{

int i,j,count;//count為輸出4位 後,在輸出壹‘,’的控制變量

if(digit2<=4)//如果計算結果不大於4位,那麽 就沒必要添加逗號,直接輸出計算結果後,返回

{

for(i=digit2;i>=1;i--)

cout<<a[i];//昨天的BUG就是出現在這裏,我把i寫成了 digit

cout<<endl;

return ;//返回,將不會執行下面的語句

}

int flag=digit2%4;

//否則按格式輸出

for(j=1;j<=flag;j++)//余數為幾,那麽就先輸出幾位後,添加壹逗號

{

cout<<a[digit2--];

}

if(flag!=0)//剛剛沒有,這裏是添加的

{

cout<<",";//輸出第壹個逗號

}

//接下了,就4位4位地添加逗號輸出

for(i=digit2,count=1;i>=1;i--,count++)

{

if(count==5)//當將要輸出第5位數時,此時要先輸出壹逗號

{

cout<<",";

count=1;//當壹輪循環結束時,控制變量 記得得從新開始

}

cout<<a[i];

}

cout<<endl;

}

int main()

{

int n;

cout<<"請輸入妳要求的數N:\n";

cin>>n;

int a[MAX];

int digit=jisuan(n,a);

cout<<"******************\n";

cout<<n<<"! 按格式輸出為:";

shuchu(digit,a); //調用題目要求的格式輸出函數

return 0;

}

這個絕對可用且很好,老師驗收過的。

  • 上一篇:字符、字節、ASCII碼的概念及其區別?
  • 下一篇:內螺紋球閥標準知識盤點
  • copyright 2024編程學習大全網