1. 程式人生 > >【C語言訓練】計算1977!

【C語言訓練】計算1977!

題目描述

編寫一個程式,計算1977!的值

輸入

輸出

樣例輸入

樣例輸出

提示

1977!的值超過計算機所能表示的整數範圍,請考慮其他技巧,假設 1977!之值不超過10000位用一個含有10000個元素的整型陣列num表示其結果,每個元素存放一位,num[0]存入個位數,num[1]存入十位數,依此類推……8!=40320,當前最高位len=4,求9!與各位依次相乘rum儲存當前的進位數字。(0<=rem<9). 
1)rem置初始值0. 
2)i=0:rem=rem+num[0]*9=0+0=0。num[0]=rem%10=0,rem=rem/10=0。 
3)i=1:rem=rem+num[1]*9=0+18=18。num[1]=rem%10=8,rem=rem/10=1。 
4)i=2:rem=rem+num[2]*9=1+27=28。num[2]=rem%10=8,rem=rem/10=2。 
5)i=3:rem=rem+num[3]*9=2+0=2。num[3]=rem%10=2,rem=rem/10=0。 
6)i=4:rem=rem+num[4]*9=0+36=36。num[4]=rem%10=6,rem=rem/10=3。 
7)rem=3,說明有進位,陣列最高位增加1,len=len+1=5,num[5]=rem%10=3,rem=rem/10=0,結束。 

num各位結果為:3、6、2、8、8、0。即9!=362880

【程式碼】

#include <stdio.h>
#define N 10000
main()
{
	int a[N]={1},i,j;
	int n,len=1,rem;
//	scanf("%d",&n);
	for(i=2;i<=1977;i++)
	{
		for(j=rem=0;j<len;j++)
		{
			rem+=a[j]*i;
			a[j]=rem%10;
			rem/=10;
		}
		while(rem)
		{
			a[j++]=rem%10;
			rem/=10;
			len++;
		}
	}
	for(len--;len>=0;len--)
		printf("%d",a[len]);
}


相關推薦

C語言訓練計算1977

題目描述 編寫一個程式,計算1977!的值 輸入 輸出 樣例輸入 樣例輸出 提示 1977!的值超過計算機所能表示的整數範圍,請考慮其他技巧,假設 1977!之值不超過10000位用一

C語言訓練計算t=1+1/2+1/3+...+1/n

題目連結:http://115.28.203.224/problem.php?cid=1010&pid=30 題目描述 計算t=1+1/2+1/3+...+1/n 輸入 整型變數n 輸出 t(保

C語言訓練4位反序數*

Description 設N是一個四位數,它的9倍恰好是其反序數,求N。反序數就是將整數的數字倒過來形成的整數。例如:1234的反序數是4321。 Input Output Samp

1147: C語言訓練角谷猜想(其實是3n+1)

題目描述 角谷猜想: 日本一位中學生髮現一個奇妙的“定理”,請角谷教授證明,而教授無能為力,於是產生角谷猜想。猜想的內容是:任給一個自然數,若為偶數除以2,若為奇數則乘3加1,得到一個新的自然數後按

C語言訓練階乘和數*

題目連結:http://115.28.203.224/problem.php?cid=1010&pid=35 題目描述 一個正整數如果等於組成它的各位數字的階乘之和,該整數稱為階乘和數。 例如,

HPUoj 題目1019 C語言訓練尼科徹斯定理(水題,數學)

1019: 【C語言訓練】尼科徹斯定理 時間限制: 1 Sec  記憶體限制: 128 MB提交: 9  解決: 5 [提交][狀態][討論版] 題目描述 驗證尼科徹斯定理,即:任何一個正整數的立

C語言訓練阿姆斯特朗數

題目連結:http://115.28.203.224/problem.php?cid=1010&pid=36 題目描述 如果一個正整數等於其各個數字的立方和,則稱該數為阿姆斯特朗數(亦稱為自戀性數)。 如 407=4^3+0^3+7^3就是一個阿姆斯特朗數。試程式設計

1133: C語言訓練求1+2!+3!+...+N!的和

題目描述 求1+2!+3!+...+N!的和 輸入 正整數N(N〈=20) 輸出 1+2!+3!+...+N!的和 (結果為整數形式) 樣例輸入 3 樣例輸出 9 提示 這道題目,看提交和通過率

C語言訓練"水仙花數"問題2

題目連結:http://115.28.203.224/problem.php?cid=1010&pid=1 題目描述 輸出所有的"水仙花數".所謂"水仙花數"是指這樣的一個三位數:其各位數字的立

C語言學習C Primer Plus》第8章 字符輸入/輸出和輸入確認

multipl 字符輸入 信號 first while 目的 bcd 問題 img 學習總結 1、緩沖區分為完全緩沖區(fully buffered)I/O和行緩沖區(line-buffered)I/O。對完全緩沖輸入來說,當緩沖區滿的時候會被清空(緩沖區內容發送至

C語言學習C Primer Plus》第6章 C控制語句:循環

double 編程練習 判斷 http 學習 main 靈活 n-1 都在 學習總結 1、循環的語法跟其他語言的沒差多少,可能大多數語言都在C的基礎上發展出來的,所以大同小異不奇怪。 2、在判斷表達式裏,C語言只有0被認為是假,所有非零值正整數都被認為真。

C語言程序讓用戶輸入一句話,輸出這句話中每個單詞含有多少個字母

get mage 一句話 printf png es2017 urn bsp can #include <stdio.h>#define N 100 //宏定義,用N表示100 int main(int argc, char *argv[]) { int i

C語言程序今天是祖國母親的生日,特意編寫一個小程序,為祖國母親慶生~

一個 img ges birt efi people print log blog #include <stdio.h>#define N 80 int main(int argc, char *argv[]) {char a[N];printf("Hello,

C語言程序輸出前50個素數

img include clu log isp ++ c語言 while bsp #include <stdio.h>#include <stdlib.h> int main(void) { int x=2; int i,cnt=0; while(c

C語言程序法雷數列

現在 給定 bsp turn 序列 double 升序 歐拉函數 pre 對任意給定的一個自然數n,將分母小於等於n的不可約的真分數按升序排列,並且在第一個分數之前加上0/1,在最後一個分數之後加上1/1,這個序列稱為n級法雷數列,以Fn表示。如F5為:0/1,1/5, 1

15、C語言基礎錯誤處理、遞歸

png lose 讓我 指針 ++ 自身 actor 計算 16px C 錯誤處理 C 語言不提供對錯誤處理的直接支持,但是作為一種系統編程語言,它以返回值的形式允許您訪問底層數據。在發生錯誤時,大多數的 C 或 UNIX 函數調用返回 1 或 NULL,同時會設置一個錯

C語言訓練-1149-計算

Problem Description 一個簡單的計算,你需要計算f(m,n),其定義如下: 當m=1時,f(m,n)=n; 當n=1時,f(m,n)=m; 當m>1,n>1時,f(m,n)= f(m-1,n)+ f(m,n-1) Input 第一行包含一個整數T(1<=T

c語言求Sn=a+aa+aaa+….+aa..a(n個a)的值

#include <stdio.h> /* 程式理解:當a = 5,n = 5 進入for迴圈後, 依次執行: t = 5 sum = 5 t = 5*10 sum = 5+55 t = 55*10 sum = 5+55+555 t = 555*10 su

C語言開發通訊錄管理系統

#include <stdio.h> #include <malloc.h> //得到指向大小為Size的記憶體區域的首位元組的指標// #include <string.h> #include <stdlib.h> //

資料結構——一元多項式的運算(相加,相減,相乘)C語言實現

實現一元多項式的運算(相加,相減,相乘) 1.輸入多項式時無論以何種順序輸入,都能夠以升冪順序輸出,且有相同指數項時能夠合併。 2.實現相加,相減,相乘功能。 3.能夠代入確切的X的值求取最終多項式的值。 #include<stdio.h> #inc