C語言基礎題
語言學習從菜鳥開始
高精度階乘的和
描述
用高精度計算出S=1!+2!+3!+…+N!(N≤50),其中"!"表示階乘,例如:5!=54321,
輸入正整數N,輸出計算結果S,
輸入
每個測驗檔案只包含一組測驗資料,每組輸入一個正整數N,
輸出
對于每組輸入資料,輸出階乘和的計算結果,
輸入樣例 1
3
輸出樣例 1
9
解題思路:
1.題目關鍵字:高精度,所以普通的階乘可能就不行啦,這是我們就可以用空間來換精確度,
2.定義兩個陣列,a[9999] ——>陣列a的空間為9999,作用:儲存在n內每一數字的階乘,可以儲存的位數為9999位,
3陣列b ——>儲存最終的答案,我習慣將最低位給第一位,(你也可以放最后面)
4.易錯點:{陣列a的初始化位置,這里我們將陣列a的初始化位置放在最的for回圈里,因為大回圈是讓1-——n之間的整數,進行階乘,而我們陣列a儲存1-n之間的整數的階乘結果,所以每次結束一個大回圈后都要重新初始化陣列a,在記錄每一個}
{陣列b儲存最后的階乘的結果,最后大回圈執行完,陣列b的結果為最終階乘和的結果,所以在記錄結果時陣列每一個位置的的結果都是(0 – 9),但大于10時當前位置的值-10,下一個位置的數值加1}
#include<stdio.h>
int main()
{
int n,i,j,k,c;
int b[9999]={0};
scanf("%d",&n);
if(n<=1)
{
printf("1");
return 0;
}
for( i=1;i<=n;i++)//回圈每一個數字是它進入下面的階乘操作
{
int a[9999] = {0};
a[0] = 1;
c = 0;
for(j = 2;j<=i;j++)//進行每一個數字的階乘操作
{
for(k = 0;k<9999;k++)
{//這一個回圈體,是將階乘的結果儲存在陣列a
//并且陣列a的每一位上的值都在(0 -- 9)之間
a[k] = a[k]*j+c;
c = a[k]/10;
a[k] = a[k]%10;
}
}
for(j = 0;j<9999;j++)
{
b[j] = b[j]+a[j];
if(b[j]>=10)
{
b[j] = b[j]-10;
b[j+1] = b[j+1]+1;
}
}
}
for(j =9998;j>=0;j--)
{
if(b[j] !=0)
{
break;
}
}
for(i = j;i>=0;i--)
{
printf("%d",b[i]);
}
return 0;
}
感謝每一位看到這里的大神,如有錯誤請指出,感謝,
有需要做兼職的大學生,可加我(vx:yi202000036),我提供你一個門檻極低的兼職(有電腦即可),在宿舍就可以做
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/281251.html
標籤:其他
