超大数問題:N!
1322 ワード
試験問題基礎練習階乗計算
この問題をコミット
リソースの制限
時間制限:1.0 sメモリ制限:512.0 MB
問題の説明
正の整数nを入力して、nを出力します!で行ないます.ここでn!=1*2*3*…*n.
アルゴリズムの説明
n!大きいかもしれませんが、コンピュータが表す整数の範囲は限られており、高精度な計算方法が必要です.1つの配列Aを用いて大きな整数aを表し,A[0]はaのビットを表し,A[1]はaの10ビットを表し,順次類推する.aに整数kを乗算すると、配列Aの各要素にkを乗算するようになります.対応するキャリーを処理することに注意してください.まずaを1にして、それから2に乗って、3に乗って、nに乗る時、すぐnを得ました!で行ないます.
入力フォーマット
入力には正の整数n,n<=1000が含まれます.
出力フォーマット
出力n!を行ないます.
サンプル入力
10
サンプル出力
3628800
大数はそのままpythonでやろうと思っていましたが、申し込んだのはC++だったので、シミュレーションを書くしかありませんでした.
vectorを使って作ります.
手算乗算AXBは、Aの各ビットがBに対して乗算を行い、これはlong longのデータを爆発させない(安心乗算)、そして答えを遍歴して維持し、そのキャリーのキャリー、この型のタッチ、それから前へキャリーする場合はvectorのinsert操作を使って、直接前にデータを挿入して、最後に答えを出力します.
コード:
この問題をコミット
リソースの制限
時間制限:1.0 sメモリ制限:512.0 MB
問題の説明
正の整数nを入力して、nを出力します!で行ないます.ここでn!=1*2*3*…*n.
アルゴリズムの説明
n!大きいかもしれませんが、コンピュータが表す整数の範囲は限られており、高精度な計算方法が必要です.1つの配列Aを用いて大きな整数aを表し,A[0]はaのビットを表し,A[1]はaの10ビットを表し,順次類推する.aに整数kを乗算すると、配列Aの各要素にkを乗算するようになります.対応するキャリーを処理することに注意してください.まずaを1にして、それから2に乗って、3に乗って、nに乗る時、すぐnを得ました!で行ないます.
入力フォーマット
入力には正の整数n,n<=1000が含まれます.
出力フォーマット
出力n!を行ないます.
サンプル入力
10
サンプル出力
3628800
大数はそのままpythonでやろうと思っていましたが、申し込んだのはC++だったので、シミュレーションを書くしかありませんでした.
vectorを使って作ります.
手算乗算AXBは、Aの各ビットがBに対して乗算を行い、これはlong longのデータを爆発させない(安心乗算)、そして答えを遍歴して維持し、そのキャリーのキャリー、この型のタッチ、それから前へキャリーする場合はvectorのinsert操作を使って、直接前にデータを挿入して、最後に答えを出力します.
コード:
#include
#include
#include