/*
* 解题思路:
* 题意:求改 输入数字 n 阶乘的最后一个非0位的值
* 刚开始结果不对是因为只保留tmp只保留了1位,应该高位一点,,比如 12 * 15 = 180 , 好像末位是8,进位是1,
* 但是 82912 *15 = 1243680,实际上是末位是8,进位是6
*/
#include <stdio.h> int main( ) { int n,i,sum,tmp,x; while( ~scanf("%d",&n) ) { for( i=sum=1,tmp=0;i<=n;i++ ) { if( i*sum %10 != 0 ) { tmp = i * (tmp*10+sum) /10; sum = i*sum%10; } else { tmp = i * (tmp*10+sum) /10; x = tmp % 10; tmp /= 10; while( !x ) { x = tmp % 10; tmp /= 10; } sum = x; } tmp %= 10000; } printf("%5d -> %d\n",n,sum); } return 0; }
原文:http://blog.csdn.net/u011886588/article/details/19440013