日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

#035 大数阶乘 PTA题目6-10 阶乘计算升级版 (20 分)

發(fā)布時(shí)間:2025/3/20 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #035 大数阶乘 PTA题目6-10 阶乘计算升级版 (20 分) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)際題目

本題要求實(shí)現(xiàn)一個(gè)打印非負(fù)整數(shù)階乘的函數(shù)。

函數(shù)接口定義:

void Print_Factorial ( const int N );

其中N是用戶(hù)傳入的參數(shù),其值不超過(guò)1000。如果N是非負(fù)整數(shù),則該函數(shù)必須在一行中打印出N!的值,否則打印“Invalid input”。

裁判測(cè)試程序樣例:

#include <stdio.h>void Print_Factorial ( const int N );int main() {int N;scanf("%d", &N);Print_Factorial(N);return 0; }/* 你的代碼將被嵌在這里 */

輸入樣例:

15

輸出樣例:

1307674368000

通過(guò)代碼

1 void Print_Factorial ( const int N ){ 2 int a[3000]; 3 int n=N; 4 if(n<0||n>1000){ 5 printf("Invalid input"); 6 return 0; 7 } 8 if(n==0){ 9 printf("1"); 10 return 0; 11 } 12 else{ 13 int w=0; 14 int i=0, j=0; 15 int t=n; 16 int k=0; // 表示數(shù)據(jù)的位數(shù)。 17 18 i=0, k=0; 19 while(t) //把數(shù)字按位數(shù)傳入數(shù)組 20 { 21 a[i++] = t%10; 22 t/=10; 23 k++; 24 } 25 26 for (j=n-1; j>1; j--) //開(kāi)始階乘 27 { 28 w=0; // 表示進(jìn)位 29 for (i=0; i<k; i++) 30 { 31 t = a[i]*j+w; //每個(gè)位數(shù)乘乘數(shù)因子+是否進(jìn)位 32 a[i] = t%10; 33 w = t/10; 34 } 35 36 while(w) //需要進(jìn)位了 37 { 38 a[i++] = w%10; 39 w/=10; 40 k++; 41 } 42 } 43 int ttt=0; 44 int ii=0; 45 46 for (ii=k-1; ii>=0; ii--) 47 { 48 printf("%d",a[ii]); 49 } 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 } 66 return 0; 67 68 }

知識(shí)點(diǎn)分析

求階乘,數(shù)過(guò)大,使用了數(shù)組進(jìn)行存儲(chǔ)

例子中1000階乘大約2500位,所以使用數(shù)組a[3000]

建立一個(gè)計(jì)算的函數(shù)

int fanc(int n)
{
int w=0;
int i=0, j=0;
int t=n;
int k=0; // 表示數(shù)據(jù)的位數(shù)。

i=0, k=0;
while(t) //把數(shù)字按位數(shù)傳入數(shù)組
{
a[i++] = t%10;
t/=10;
k++;
}

for (j=n-1; j>1; j--) //開(kāi)始階乘
{
w=0; // 表示進(jìn)位
for (i=0; i<k; i++)
{
t = a[i]*j+w; //每個(gè)位數(shù)乘乘數(shù)因子+是否進(jìn)位
a[i] = t%10;
w = t/10;
}

while(w) //需要進(jìn)位了
{
a[i++] = w%10;
w/=10;
k++;
}
}
return k;
}

建立一個(gè)打印的函數(shù)

個(gè)位存在數(shù)組第一個(gè)位置,十位存在第二個(gè),以此類(lèi)推,

所以輸出的時(shí)候要反向輸出。

123是按照 3 2 1存儲(chǔ)的

?

void show(int k)
{
int i=0;
printf("位數(shù) %d 位\n",k);
for (i=k-1; i>=0; i--)
{
printf("%d",a[i]);
}
}

?

引用博客

鏈接:

大數(shù)運(yùn)算_求1000的階乘(C語(yǔ)言實(shí)現(xiàn))

引用代碼

1 // 1000 的階乘 2568 位 2 #include <stdio.h> 3 4 int a[3000]; 5 6 void show(int k) 7 { 8 int i=0; 9 printf("位數(shù) %d 位\n",k); 10 for (i=k-1; i>=0; i--) 11 { 12 printf("%d",a[i]); 13 } 14 } 15 16 int fanc(int n) 17 { 18 int w=0; 19 int i=0, j=0; 20 int t=n; 21 int k=0; // 表示數(shù)據(jù)的位數(shù)。 22 23 i=0, k=0; 24 while(t) 25 { 26 a[i++] = t%10; 27 t/=10; 28 k++; 29 } 30 31 for (j=n-1; j>1; j--) 32 { 33 w=0; // 表示進(jìn)位 34 for (i=0; i<k; i++) 35 { 36 t = a[i]*j+w; 37 a[i] = t%10; 38 w = t/10; 39 } 40 41 while(w) 42 { 43 a[i++] = w%10; 44 w/=10; 45 k++; 46 } 47 } 48 return k; 49 } 50 51 52 int main() 53 { 54 int n; 55 int k=0; 56 57 scanf("%d",&n); 58 k = fanc(n); 59 show(k); 60 printf("\n"); 61 return 0; 62 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/hx97/p/10789237.html

總結(jié)

以上是生活随笔為你收集整理的#035 大数阶乘 PTA题目6-10 阶乘计算升级版 (20 分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。