我想编写一个最短的代码片段代码,使用最小数量的变量(不能使它少于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);
}
我的代码有效。
感谢所有指出基本语法错误的人。
当一个人不熟悉语言规则时会发生语法错误,但最重要的是代码的逻辑,这是正确的。
答案 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);
}