UVa 568: Just the facts
2013-07-25 19:49
579 查看
这题要求N!的末尾非零位,考虑用模除法保留阶乘计算中每次乘法后所得结果的最后几位数。
当遇到乘数为5的倍数时,从保留的最后几位数中分出2与乘数因子中的5配对。
阶乘做完后模10得到结果。
另:
这种方法只适合N较小的情况。
保留每次乘积的至少末5位,因为计算3125!的对饮结果时如果保留的位数过少,将没有足够的2与3125=5^5中的5匹配消去,会得到错误结果
我的解题代码如下:
当遇到乘数为5的倍数时,从保留的最后几位数中分出2与乘数因子中的5配对。
阶乘做完后模10得到结果。
另:
这种方法只适合N较小的情况。
保留每次乘积的至少末5位,因为计算3125!的对饮结果时如果保留的位数过少,将没有足够的2与3125=5^5中的5匹配消去,会得到错误结果
我的解题代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int main() { int N; int digit; //用于保留乘积的末5位 int k; while(cin >> N) { digit = 1; for(int i=1; i<=N; i++) { k=i; while(k%5==0) {//从digit中除去2,消去k中的5 k = k/5; digit = digit/2; } digit = (digit*k)%100000; } digit %= 10; printf("%5d -> %d\n",N,digit); } return 0; }
相关文章推荐
- UVA 568 Just the Facts (水)
- UVa 568 Just the Facts (数论&打表&不打表)
- UVa 568 Just the Facts
- UVa 568 - Just the Facts
- UVA 568 - Just the Facts
- Uva 568 - Just the Facts
- UVa 568 - Just the Facts
- uva 568 - Just the Facts
- UVa 568 - Just the Facts
- UVa 568 - Just the Facts
- UVa 568 - Just the Facts
- UVA 568 (暑假-数论 -C - Just the Facts)
- uva 568 just the facts
- Uva 568 - Just the Facts
- UVA 568 Just the Facts
- UVA - 568 Just the Facts
- uva568 Just the Facts
- UVA 568 - Just the Facts(数论)
- UVA 568 - Just the Facts
- Uva 568 - Just the Facts