本文主要是介绍uva 568 Just the Facts(n!打表递推),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意是求n!的末尾第一个不为0的数字。
不用大数,特别的处理。
代码:
#include <stdio.h>
const int maxn = 10000 + 1;int f[maxn];int main()
{#ifdef LOCALfreopen("in.txt", "r", stdin);#endif // LOCALf[0] = 1;for (int i = 1; i <= 10000; i++){f[i] = f[i - 1] * i;while (f[i] % 10 == 0)f[i] /= 10;f[i] %= 100000;//一定要至少保留后五位非零位(五位以上要注意int型溢出,因此取五位最佳),因为后五位非零位的进位(极限情况3125,即5^5)会影响到最后的非零位}int n;while (scanf("%d", &n) == 1){printf("%5d -> %d\n", n, f[n] % 10);}return 0;
}
这篇关于uva 568 Just the Facts(n!打表递推)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!