C语言。因子代码(最短)

时间:2013-03-13 07:57:37

标签: c

我想编写一个最短的代码片段代码,使用最小数量的变量(不能使它少于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 

下一个i是1 x = 120 * 1,因此这是阶乘。

我知道那里有明亮的大脑可以拿出混淆的代码来完成所有这一切,但我会很满意只是为了找出为什么会给我错误。

人们输入后的更新:

现在它总是收益0,即使我改变了i!= 2

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

    printf("%d",x);


   }

最终解决方案和解释:

我使用PHP和Java编写代码,今天我想用C语言快速编写,所以当我写这篇文章时:

int x,i = 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);
}

我的代码有效。

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

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

7 个答案:

答案 0 :(得分:5)

{之后忘记main()你已经欺骗了编译器,让你相信你打算写K&amp; R C,所以它开始把你的本地人解释为参数。

答案 1 :(得分:2)

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

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

请注意,您必须包含math.h才能生效。

答案 2 :(得分:1)

int x, i = 5;

上述行应在{之后进入主要行。在您的情况下,它位于main(){

之间

答案 3 :(得分:1)

Psyoencontréotramáscorta,weyes:

    #include<stdio.h>
    int main(){
        int fac=5,i=fac;
        while(i>1){
            i--;
            fac=i*fac;
     }
    printf("%d",fac);
    }

答案 4 :(得分:0)

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

#include<stdio.h>

int main()
{
    int x = 1, i = 5;
    while(i!=1)
    {
       x *= i;
       i--;
    }
    printf("%d",x);
    return 0;
}

答案 5 :(得分:0)

初始化x = 1

希望这可以解决问题

答案 6 :(得分:0)

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

#include<stdio.h>

void main()
{
  int num = 5, sum = num;
  while(num > 1)
  {
     sum *= (--num);
  }
  printf("%d",sum);
}