#include <stdio.h>
long fac(int n);
int judge(long n);
int main(void)
{
int a, b, c, d, e, f, g, exact;
a = b = c = d = e = f = g = 0;
for (exact = 1; exact <= (99999); exact++)
{
if (judge(exact) == 1)
if (fac(exact) == exact)
printf("%d\n", exact);
if (judge(exact) == 2)
{
a = exact / 10;
b = exact - a*10;
if(fac(a)+fac(b) == exact)
printf("%d\n", exact);
}
if (judge(exact) == 3)
{
a = exact /100;
b = exact/10 - a*10;
c = exact - a*100 - b*10;
if(fac(a) + fac(b) + fac(c) == exact)
printf("%d\n", exact);
}
if (judge(exact) == 4)
{
a = exact/1000;
b = exact/100 - a*10;
c = exact/10 - a*100 - b*10;
d = exact - a*1000 - b*100 - c*10;
if (fac(a) + fac(b) + fac(c) + fac(d) == exact)
printf("%d\n", exact);
}
if (judge(exact) == 5)
{
a = exact/10000;
b = exact/1000 - (a*10);
c = exact/100 - (a*100) - (b*10);
d = exact/10 - (a*1000) - (b*100) - (c*10);
e = exact - (a * 10000) - (b * 1000) - (c * 100) - (d*10);
if (fac(a) + fac(b) + fac(c) + fac(d) + fac(e) == exact)
printf("%d\n", exact);
}
}
return 0;
}
long fac(int times)
{
long sum = 1;
int i, j;
for (i = 1; i <= times; i++)
{
j = i;
sum = sum * j;
}
return sum;
}
int judge(long n)
{
int length = 1;
while (n > 1)
{
length++;
n = n/10;
}
return length;
}
此程序倾向于计算所有特定数字,例如abc = a!b!c! (a!是阶乘) 我已经知道只有4个数字满足这个条件,它们分别是1,2,145和40585。 但我运行我的程序,只显示1和145。 我应该怎么解决这个问题?或者你可以给我一个更聪明的方法来做到这一点?
(我建立了两个函数,fac()来计算阶乘,判断()来显示它包含多少个数字。)
非常感谢!
答案 0 :(得分:1)
你的判断函数返回错误的值。你可以用2种方法纠正它。第一种方法
int judge(long n)
{
int length = 0;
while (n > 0)
{
length++;
n = n/10;
}
return length;
}
另一种方法是使用额外的变量int size和char str [10]。
size = sprintf(str,"%d",exact); // find length of digit
if (size == 1){ // check lenght of digit == 1
两种方法都会返回正确的结果。
答案 1 :(得分:0)
改变你的判断&#34;函数(实际上是计算位数)如下
int judge(long n) {
int length = 0;
while (n!=0) {
n = n/10;
length++;
}
return length;
}
我确定它会起作用
答案 2 :(得分:0)
您的judge
函数返回的值不正确。在此功能中,您可以检测到数字的数字。对于输入1
,它应该返回1
,对于输入5
,它应该返回40585
。它返回6
作为第二个输入。
应该改变如下。
int judge(long n)
{
int length = 0;
while (n >= 1)
{
length++;
n = n/10;
}
return length;
}