洛谷 階乘之和(大數加 大數乘)

2021-10-09 22:49:07 字數 1901 閱讀 1684

用高精度計算出s=1!+2!+3!+…+n!(n≤50)s=1!+2!+3!+…+n! (n≤50)s=1!+2!+3!+…+n!(n≤50)

其中「!」表示階乘,例如:5!=5×4×3×2×15!=5 \times 4 \times 3 \times 2 \times 15!=5×4×3×2×1。

乙個正整數nnn。

乙個正整數sss,表示計算結果。

輸入 #1

3
輸出 #1

9
題意很簡單就是輸入乙個數計算從1到這個數的階乘之和。即1!+2!+3!+.......+n!

先算出每個數的階乘,再將其累加到乙個陣列上即可。

剛開始沒有看清題意就開始寫了,我就只算了n!,沒有進行累加。原來這題是大數加加大數乘,唉,大意了。

下面是**分為有注釋和無注釋的,因為有注釋的有點亂所以整理乙個簡潔版

#include#include#includeint a[100000];

int b[100000];

int c[200000];

int sum[30000];

int factorial(int m,int n)

// for(int i=0;i0) //從後往前找第乙個不為0的數的位置,注意至少有一,畢竟0也是一位數

k--;

for(int i=0;i<=k;i++) //為了下次相乘,將相乘的結果儲存到b陣列中

b[i]=c[i];

for(int i=0;i<=k;i++) //將結果陣列清0,不然下次無法計算

c[i]=0;

// printf("%d*\n",k);

return k+1; //返回結果陣列的長度

}int add(int m,int n) //兩個字串累加函式

} else

} if(sum[i+1]!=0) return i+1; //返回相加後的陣列的長度。

else return i;

} int main()

// printf("%d %d**\n",m,n);

// for(x=0;x=0;i--)

// printf("%d",b[i]);

// printf("\n");

// printf("\n");

for(i=y-1;i>=0;i--) //輸出結果

printf("%d",sum[i]);

return 0;

}

#include#include#includeint a[100000],b[100000],c[200000],sum[30000]; 

int factorial(int m,int n)

int k=m+n;

while(c[k]==0 && k>0)

k--;

for(int i=0;i<=k;i++)

b[i]=c[i];

for(int i=0;i<=k;i++)

c[i]=0;

return k+1;

}int add(int m,int n)

} else

} if(sum[i+1]!=0) return i+1;

else return i;

} int main()

x=factorial(m,x);

y=add(x,y);

} for(i=y-1;i>=0;i--)

printf("%d",sum[i]);

return 0;

}

階乘之和 大數乘法和大數加法

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 用高精度計算出s 1!2!3!n!n 50 其中 表示階乘,例如 5!54321。輸入正整數n 輸出計算結果s 輸入 3輸出 9利用數學方式計算大數。牛客...

洛谷 階乘數碼 階乘之和

題目描述求n 中某個數碼出現的次數。輸入格式 第一行為t 10 表示資料組數。接下來t行,每行乙個正整數n 1000 和數碼a。輸出格式 對於每組資料,輸出乙個整數,表示n 中a出現的次數。輸入樣例 1 2 5 27 0 輸出樣例 1 1 2 直接高精階乘 include include inclu...

P1009 階乘之和(大數計算)

allsight c語言 高精度加法 問題描述 輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。演算法描述 由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。定義乙個陣列a,a 0 用於儲存a的個位,a 1 用於儲存a的十位,依此類推。...