求大數的階乘。比如1000的階乘。C語言裡沒有能夠存這麼大的資料型別。
我的想法是用兩個迴圈,
外層迴圈從1到n。內層迴圈求每個數與前面的數的乘積。
#include<stdio.h>
int main()
{
static int a[100000]; //設定一個超大陣列來儲存乘積結果。
int n;//要求的n的階乘
int jw;//用來表示進位
int i,j;//控制迴圈
int len=1;//初始化陣列長度為1
int temp;//過程變數
scanf("%d",&n);
a[1]=1;
for(i=2;i<=n;i++)//遍歷。從1到n
{
jw=0;
for(j=1;j<=len;j++)//從陣列的低位開始乘
{
temp=a[j]*i+jw;//變數儲存結果
a[j]=temp%10;//將變數最後一位放入陣列。
jw=temp/10;//表示除了最後一位需要進位的數
if(j>=len && jw!=0)
len++;
//陣列長度加一
}
}
for(i=len;i>=1;i--)//逆序輸出陣列就是結果
printf("%d",a[i]);
printf("\n");
return 0;
}
這是執行測試的結果,完全正確。
(初次寫,希望多多支援)
相關推薦
求大數的階乘。比如1000的階乘。C語言裡沒有能夠存這麼大的資料型別。
我的想法是用兩個迴圈, 外層迴圈從1到n。內層迴圈求每個數與前面的數的乘積。 #include<stdio.h> int main() {static int a[100000]; //設定一個超大陣列來儲存乘積結果。int n;//要求的n的階乘int jw
求1000以內的質數c語言
之前在做求1000以內的質數的時候,我們一般能想到的就是從3~(根號)no,逐一和no除,如果存在某個i使得 i|no成立的話,說明no不是質數(“i|no”是i整除除no的意思); 在《明解c語言》上看到了一種與相似,但運算次數比其還少的。 #include <stdio.h
給定一個非負整數陣列,最初定位在陣列的第一個索引處。組中的每個元素表示您在該位置的最大跳躍長度。求最小跳數
本題源自leetcode 45 ------------------------------------------------------------------------- 思路:用倆個 變數標識當前的位置 和 下一步能調到最遠的位置。 程式碼: int jum
C語言 輸入一個小數,輸出它的立方。輸出保留小數點後的2位數字
c //輸入一個小數,輸出它的立方。輸出保留小數點後的2位數字。 #include <stdio.h> int main(int argc, const char * argv[]) { double i,t; printf("輸入一個小數:\n"); scanf("%lf
PTA-求整數序列中出現次數最多的數(C語言)
本題要求統計一個整型序列中出現次數最多的整數及其出現次數。 輸入格式: 輸入在一行中給出序列中整數個數N(0<N≤1000),以及N個整數。數字間以空格分隔。 輸出格式: 在一行中輸出出現次數最多的整數及其出現次數,數字間以空格分隔。題目保證這樣的數字是唯一的。 輸入樣例:
用C語言實現:交換兩個數陣列的內容。
1.計算1/1-1/2+1/3…+1/99-1/100的值 2.交換兩個相等大小陣列的內容 3.1-100中的整數,帶9的整數出現的個數? 交換兩個陣列的內容(陣列大小子相同) 程式列印1-100出現9的個數 #include<stdio.h> #in
c++語言 linux編譯通過,windows編譯不通過。
bool operator<(Human& man)// 需要修改為 bool operator<(const Human& man) const { return Human.age < man.age; } #include<stdio.h&g
python 牛客網 你的輸出為:空。請檢查一下你的程式碼,有沒有迴圈輸入處理多個case。問題解決
你的輸出為:空。請檢查一下你的程式碼,有沒有迴圈輸入處理多個case。點選檢視如何處理多個case 核心:他這個程式測試正確與否的流程是 連續輸入多組測試資料進行測試,只有每組資料都對才行 所以必須使用下面的程式模組: 1 while True: 2 try
C語言:使用函式實現兩個數的交換。
此題的解決思路為:建立一個Swap函式,引數為a和b,函式內部建立一個臨時變數tmp,用於交換兩個數。 但需要注意的是:函式傳參的過程中需要注意,形參是實參的一份臨時拷貝,形參的改變不會影響實參,所以此時函式傳參的時候需要傳遞實參的地址(&a),即傳址呼叫,在接收部
【c語言】一個字串,包含n個字元。將此字串中從第m個字元開始的全部字元複製成為另一個字串。
#include <stdio.h> #include <string.h> int main() { void copystr(char *,char *,int); int m; char str1[20],str2[20]; print
C語言例項13——題目:輸出9*9口訣。
題目:輸出9*9口訣。 //程式分析:分行與列考慮,共9行9列,i控制行,j控制列。 #include<stdio.h> int main(){ int i, j, result; p
C++語言中用指標申請記憶體時產生的問題。
看下面一段程式:#include<iostream.h>int main(){ int *p; //(1) { int *tm; //(2)
關於c語言中各符號的意義,以及優先順序。
<1> ? x:y 類似於if語句,例如: x>9?50:100; 意思是x是否大於9 ,是的話就輸出50,不是的話就輸出100; <2>字母與數字比較大小,實際比較ASCII碼值大小,字母都大於數字。 <3>c語言中,!的作
C語言取花生米(取棋子)系列問題。從一堆中輪流取的情況。
最簡單情況 描述 Tom和Jerry是鄰居,他們都喜歡吃花生米。Tom的信條是“規則永遠由強者制定,弱者只有遵守的權力”;Jerry則深信“頭腦比拳頭更有力量”。除此之外,他們都很聰明,恩,至少有211工程大學本科生水平。 五一長假第一天,Tom和Jer
64位win7平臺下,使用C語言通過odbc無法連線MySQL資料庫的問題。
編譯器:vc6.0或vs2012 最近學習資料庫需要使用C語言通過odbc管理資料庫,可是總是出問題,記錄如下: 1. 首先安裝mysql資料庫,這裡不多講。 2. 選擇編譯器,我電腦上的編譯器還是蠻多的,但是從網上查到的資料以及原始碼中需要包含的標頭檔案都是vc特有的
C語言:在螢幕上列印楊輝三角。
在編寫這個程式之前,我們應該清楚什麼是楊輝三角? 解釋:每個數等於它上方兩數之和。每行數字左右對稱,由1開始逐漸變大。第n行的數字有n項。 #include<stdio.h> #include<windows.h> #define N 10 定
C 語言字串 將一行字串I am a student。逆序輸出student。a am I;
方法1 #include <stdio.h> #include <string.h> #define N 4//單詞的個數 #define M 20//單詞的長度 int main(void) {char str[N][M],str1[M];int
C語言 makefile檔案與標頭檔案的寫法。
makefile 檔案的書寫。 總結下make 執行過程 1)make 在當前目錄下找 "Makefile"或"makefile"的檔案 2)如果找到,則會找檔案中第一個目標檔案(target)。 3)如果 main 命令的執行,依賴後面命令執
斯特林(Stirling)公式 求大數階乘的位數
href put || tdi code const 但是 body https 我們知道整數n的位數的計算方法為:log10(n)+1n!=10^m故n!的位數為 m = log10(n!)+1 lgN!=lg1+lg2+lg3+lg4+lg5+...........
2017/7/31-zznu-oj-問題 B: N! 普拉斯 -【求大數的階乘-ll存不下-然後取尾零的個數輸出-暴力模擬】
討論 def ems long size 字符串 problems turn dmi 問題 B: N! 普拉斯 時間限制: 1 Sec 內存限制: 128 MB提交: 114 解決: 35[提交] [狀態] [討論版] [命題人:admin] 題目描述 在處理階乘時也