Uva--568 (数学,数字处理)
2014-06-11 13:27:30
题意&思路:求n阶乘的最右非零位。
思路:建表,在每次运算后要进行去零(因为末尾的零对最右非零位产生不了影响),然后要注意的是每次运算后取模,根据 ab mod n = (a mod n)*(b mod n) mod n,当然有可能失真(但这题卡过去了QAQ)
#include <cstdio> #include <cmath> #include <iostream> using namespace std; int main(){ int n[10005]; n[0] = 1; n[1] = 1; for(int i = 2; i <= 10000; ++i){ n[i] = n[i - 1] * i; while(n[i] && n[i] % 10 == 0){ n[i] /= 10; } n[i] %= 100000; //printf(" %d\n",n[i]); } int num; while(scanf("%d",&num) == 1){ printf("%5d -> %d\n",num,n[num] % 10); } return 0; }