平方和階乘
題目限制
時間限制 1000ms 記憶體限制 1000kib
題目描述 description
小明是乙個數學渣渣,但是老師總是讓他做一些很奇怪的題目。
這次小明又遇到麻煩了,老師告訴他乙個數a,讓他求出這個數平方的階乘a1和這個數階乘的平方a2,還要a1a2的和,和a1a2的非負數差;
在a很小的時候,小明勉強能死算出答案;但是a很大的時候,小明就崩潰了。
請你為小明編乙個程式解決這個問題。
輸入描述 input description
輸入乙個正整數a。(1<=a<=250)
輸出描述 output description
第一行輸出a平方的階乘a1。
第二行輸出a階乘的平方a2。
第三行輸出a1+a2的值。
第四行輸出a1-a2的絕對值。
樣例輸入 sample input
3
樣例輸出 sample output
362880
36362916
362844
資料範圍及提示 data size & hint
1<=a<=250;
資料大到不可想象,務必使用高精。(不用可能1個測試點也不過)
a1=(aa)!;a2=(a!)(a!);
思路點拔:由於本題資料很大,所以我們需要使用高精度進行求解,首先計算平方的階乘,由於a的平方沒有爆,所以我們就用乙個int型別的變數儲存a的平方的值,然後,我們就使用高精乘以低精的做法,然後我們那另乙個陣列把這個階乘的結果複製乙份,然後就使用純粹的高精乘,然後就用乙個高精加和乙個高精減就可以了,唯一要強調的就是:陣列開得有點多,所以不要搞混淆了。
上**!!
#include
#include
#include
using
namespace
std;
int a[1000005]=,x,w=1,b[1000005]=,c[1000005],d[2000005],e[1000005],f[1000005];
char a1[100005],d1[100005];
int main()
//計算
while(x) //處理進製
}for(int i=w;i>=1;i--) printf("%d",a[i]); //輸出平方的階乘的結果
printf("\n");
int lena=w; //儲存結果的長度,便於一會使用
w=1; //將位數重新變為1
for(int i=2;i<=n;i++) //首先計算n的階乘,由於n<=250,所以也需要使用高精度
//計算
while(x>0)//處理進製
}for(int i=1;i<=w;i++) c[i]=b[i]; //複製乙份,以便下面使用
for(int i=1;i<=w;i++)
d[i+w]=x; //處理最高位的進製
}int lenc=2*w;
while(d[lenc]==0&&lenc>1) lenc--; //去除前導0
for(int i=lenc;i>=1;i--) printf("%d",d[i]); //輸出平方的階乘的結果
printf("\n");
int lenb=lenc,lend=1; //lenb用來儲存長度,lend用來儲存和的長度
x=0;
while(lend<=lena||lend<=lenb) //高精加
e[lend]=x; //處理最高位
while(e[lend]==0&&lend>1) lend--; //去除前導0
for(int i=lend;i>=1;i--) printf("%d",e[i]);
//輸出平方的階乘與結成的額平方的和
printf("\n");
for(int i=1;i<=lena;i++) a1[i]=a[i]+'0';
//將它們先轉化為字串,一會好使用函式,更方便一些
for(int i=1;i<=lenb;i++) d1[i]=d[i]+'0';
if(lenastrcmp(a1,d1)<0))
//比較兩個數的大小,如果前乙個數小於後乙個數
for(int i=1;i<=lena;i++) a[i]=a1[i]-'0';
//然後將它們重新轉化為整形,方便下面計算
for(int j=1;j<=lenb;j++) d[j]=d1[j]-'0';
int i=1; //i用來儲存結果的位數
while(i<=lena)
//處理借位
f[i]=a[i]-d[i];//計算
i++;
}while(f[i]==0&&i>1) i--; //去除前導0
int lenans=i;
//由於i是定義在外面的,所以和for迴圈裡面的i不影響,但是輸出是就有問題了
for(int i=lenans;i>=1;i--) printf("%d",f[i]); //輸出
return0;}
/*大家會發現這些**很繁瑣,就是出現了一些很相似的地方,大家就像寫幾個子函式
但是我覺得呼叫函式需要時間,所以我覺得這樣寫執行時間短,但是寫函式在本題也不
會超時,所以有興趣的可以自己試一下,我就不上**了 ^_^*/
C 利用遞迴求乙個數的階乘 遞迴 階乘
當然也可以用迭代 就是迴圈 來求階乘,遞迴適用於選擇結構,迭代適用於迴圈結構。能用遞迴解決的問題,一定能用迭代來解決。c 利用遞迴求乙個數的階乘 遞迴 即自己呼叫自己 分類 分為直接呼叫和間接呼叫 直接呼叫 不通過其他函式直接在本函式內,呼叫自己。間接呼叫 通過多步操作,在其他函式內呼叫本身。inc...
輸入乙個菱形的內高和外高,畫出乙個空心菱形
歡迎交流,共同進步。題目為 已知內層和外層菱形的高度,輸出一空心菱形 使用自己的語言描述 使用c語言畫出乙個菱形,輸入上三角高內層菱形為l1,外高為l2,輸入需要保證數值為正整數,且為奇數。此處我理解菱形為對角線相等的菱形 看了題目後編寫如下,設計思路為從 菱形中扣 菱形,寫的時候遇到很多思路不清晰...
乙個高ai的分頁函式和乙個url函式
aidu ad 這個分頁 函式非常高只能的 看看就知道了 function ppage total,page,e page 15,e block 10,url color totalpage ceil total e page 頁面數目 p block ceil totalpage e block ...