主题:[原创]跪求原因 请一定帮下忙 一个C程序
对于小于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以内 所以益处的可能性不大 我实在找不到原因 请求帮助
例如
当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以内 所以益处的可能性不大 我实在找不到原因 请求帮助