我一直在尝试将此代码从C转换为java但是还没有成功,主要是因为我从来没有学过C. for循环让我感到困惑......
int a=10000,b,c=2800,d,e,f[2801],g;
main(){
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}
我在此网站上看到了代码http://www.cs.uwaterloo.ca/~alopez-o/math-faq/mathtext/node12.html。任何帮助将受到高度赞赏。特别是第二个和第三个for循环没有条件语句,它们应该是。
答案 0 :(得分:4)
在C中,for循环可能有缺少的子句。
如果您知道这一点并且还知道for
是什么:
for ( initialization ; condition ; increase )
{
code;
}
//is actually
initialization;
while (condition)
{
increase;
code;
}
实际上很简单:
for(;b-c;)f[b++]=a/5;
相当于
while (b-c)
{
f[b++] = a/5;
}
第二个:
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
相当于:
while ( d=0, g=c*2 )
{
//the order in which the following are executed might be different
c-=14;
printf("%.4d",e+d/a);
e=d%a;
}
最后,第三个:
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
相当于:
b=c;
while ( d+=f[b]*a, f[b]=d%--g, d/=g--, --b )
{
D*=b;
}
然而,代码真的真的丑陋,你最好从头开始。
编辑:
进一步的解释 - 对于由逗号分隔的表达式组成的条件,只有与循环相关的最后一个:
while ( a, b, c )
{
}
将循环,直到c
被评估为false。但是,a
和b
在每次迭代时执行。因此,如果将c
计算为false
,则条件语句中的另一个表达式仍然执行,而增量语句中的表达式不是(这可能是此处的意图)。