http://cnc-http.xpbook.com:81/200609/ywm_sjjg_C.rar?591713546963x1193216800x591715462935-29f796d8c67513dd7ed25efebd5d6c10
对于小于25000的自然数n ,求阶乘n!,(n-1)!,(n-2)!,……,3!,2!,1!右边的非零数之和。(提示:大家注意观察规律,单纯的求阶乘,肯定会超出范围) 
例如 
当n = 5时 
5!= 120 ,右边非零数为2 
4!= 24,右边非零数为4 
3!= 6,右边非零数为6 
2!= 2,右边非零数为2 
1!= 1,右边非零数为1 
其右边是非零数之和为 15 


#include "stdio.h" 

/*返回m右边第一位非零整数*/ 
long yu(long m) 
{   long n,k; 
    k=10; 
    n=m%k; 
    while(!n) 
        {   n=(m/10)%k; 
         } 
    return n; 


/*返回I!右边第一位非零整数*/ 
long rad(long i)/*不知道为什么这里的i不能大于50 当i为50就没有结果出来*/ 
{  long m; 
    if(i==1) 
        return 1; 
    else 
        {  m=yu(rad(i-1)*i); 
           printf("m=%d\n",m); 
           return m; 
        } 
 } 

main() 
{   long s, i, n ; 
    printf("please input a NUM:"); 
    scanf("%ld",&n); 
    s=0; 
    for(i=1;i<=n;i++) 
        { 
            s=s+rad(i); 
         } 
     printf("total is :%ld",s); 
     getch(); 
 } 
输入50以下的所有数都可以  当输入50就不出结果 49的时候我全用的是int 50我改为long还是没有反映 而且我还输出了各个变量的值都在300以内 所以益处的可能性不大  我实在找不到原因  请求帮助