問題はこちら
No.500 階乗電卓 - yukicoder
N≧50以上のとき、N!は2,5の素因数をそれぞれ12個以上もつのでN! mod 10^12=0
それ以下のときだけ計算すれば良い
14!<10^12<15!なので、Nが15以上のときには先頭を0埋めする
long s=1,n; main(){ scanf("%ld",&n); if(n>=50){ puts("000000000000"); }else{ for(int i=1;i<=n;i++)s=s*i%1000000000000; printf(n>=15?"%012ld":"%ld",s); } }
条件分岐の順番をちょっと考えていい感じにまとめる
long s=1,n,M=1e12; main(i){ for(scanf("%ld",&n);n%51/i;s=s*i++%M); printf(n<15?"%ld":"%012ld",i<n?0:s); }
101B
2017/07/28追記
だいぶ頭が悪かったみたいですね
long s=1,n,M=1e12; main(i){ for(scanf("%ld",&n);n/i*50/i;s=s*i++%M); printf(n<15?"%ld":"%012ld",s); }
97B