-5

我想为阶乘运算编写尽可能短的代码段,同时使用最少数量的变量(不能少于 2 个)和最少的行数。但是,尽管我认为逻辑是好的和正确的,但它不起作用:/

这里是:说 5 的阶乘。

#include<stdio.h>

main()   
int x, i = 5;
{
     while(i!=1)
     {
         i--;
         x *= i;
     }

     printf("%d",x); 
}

所以,让我们描述一下这段代码会做什么:

在循环内部i转 4,然后我们有x = 5 * 4它使它成为 20。

下一轮i是 3,我们有

x = 20 * 3

下一轮i是2

x = 60 * 2 

nexti是 1 x = 120 * 1,所以这是阶乘。

我知道那里有聪明的头脑,他们可以想出混淆代码来在半行内完成所有这些,但只要找出为什么给我错误,我就会很满意。

人们输入后更新:

它现在总是产生 0,即使我改变 i!=2

     main()
     {
        int x, i = 5;
        while(i!=1)
       {
         i--;
         x *= i;
       }

    printf("%d",x);


   }

最终解决方案和解释:

我用 PHP 和 Java 编码,今天我想用 C 做一个快速的,所以当我写这个时:

整数 x,我 = 5;

我理所当然地认为它会初始化为 5,就像它在 PHP 和 JAVA 中所做的那样,但事实并非如此!

所以,如果我这样做

 #include<stdio.h>

main()   
int x = 5;
int i = 5;
{
     while(i!=1)
     {
         i--;
         x *= i;
     }

     printf("%d",x); 
     return (0);
}

我的代码有效。

感谢所有指出基本语法错误的人。

当一个人不熟悉语言规则时会发生语法错误,但最重要的是代码的逻辑并且是正确的。

4

7 回答 7

5

通过在您欺骗编译器相信您打算编写 K&R C{之后忘记 a ,它开始将您的本地变量解释为参数。main()

于 2013-03-13T08:02:04.530 回答
2

如果您正在寻找可能的最短代码,这里有一个不需要任何变量的分析解决方案。它不使用任何类型的循环或递归。

long int fac(unsigned long int n) {
    return lround(exp(lgamma(n+1)));
}

请注意,您必须包含math.h此功能才能正常工作。

于 2013-03-13T08:33:31.997 回答
1
int x, i = 5;

上面的行应该在 main 之后{。在您的情况下,它介于main(){

于 2013-03-13T08:00:12.390 回答
1

Ps yo encontré otra más corta, weyes:

    #include<stdio.h>
    int main(){
        int fac=5,i=fac;
        while(i>1){
            i--;
            fac=i*fac;
     }
    printf("%d",fac);
    }
于 2018-04-07T19:11:17.563 回答
0

您忘记了{并且您需要x在使用之前进行初始化,因为它会导致未定义的行为

#include<stdio.h>

int main()
{
    int x = 1, i = 5;
    while(i!=1)
    {
       x *= i;
       i--;
    }
    printf("%d",x);
    return 0;
}
于 2013-03-13T08:00:57.767 回答
0

初始化 x = 1

希望这能解决问题

于 2013-03-13T08:19:29.287 回答
0

执行阶乘的最快方法...

#include<stdio.h>

void main()
{
  int num = 5, sum = num;
  while(num > 1)
  {
     sum *= (--num);
  }
  printf("%d",sum);
}
于 2017-05-01T14:10:15.777 回答