这是段反编译的代码,经过我简化,但结构不变.
void foo(int a,int b,int c)
{
int k = b;
if( a == 0) goto _L2; else goto _L1
_L1:
k++;
_L2:
if(k < c) goto _L1; else goto _L3
_L3:
return;
}我还原成java 写成
void foo(int a,int b){
int k = b;
if(a==0) {
while(k<c) { k++; }
}
else
{
do{ k++; }while(k<c)
}
}我相信原始的代码肯定没有这么复杂,有人能给出最优的解法吗?
void foo(int a,int b,int c)
{
int k = b;
if( a == 0) goto _L2; else goto _L1
_L1:
k++;
_L2:
if(k < c) goto _L1; else goto _L3
_L3:
return;
}我还原成java 写成
void foo(int a,int b){
int k = b;
if(a==0) {
while(k<c) { k++; }
}
else
{
do{ k++; }while(k<c)
}
}我相信原始的代码肯定没有这么复杂,有人能给出最优的解法吗?
int k = Math.max(b,c)+(a==0?0:b/c);
System.out.println(k);
}
上面那个我写的有些问题,重新发一遍题目//JAVA反编译代码如下:
int foo(int a,int b,int c)
{
int k = b;
if( a == 0) goto _L2; else goto _L1
_L1:
k++;
_L2:
if(k < c) goto _L1; else goto _L3
_L3:
return k;
} //我手动还原后的代码如下:
int foo(int a,int b,int c)
{
int k = b;
if(a==0)
{
while( k <c )
{
k++;
}
}
else
{
do
{
k++; }while(k <c);
}
return k;
} 请问各位还有没有更优的解法?
private static void foo1(int a,int b,int c){
int k = b;
if(k<c)k=c;
k+=(a==0?0:b/c);
System.out.println(k);
}
a = 2 * 2;
a = 2 + 2;
a = 2 << 1;
a = 4;但是不可逆着一定推出什么了。我觉得shan写得就很好了,而且比那两个C++的星星写得好。
private static void foo1(int a,int b,int c){
int k = b;
if(k<c)k=c;
k+=(a==0?0:b/c);
System.out.println(k);
} 这样的 private static void foo1(int a,int b,int c){
int k = b;
if(k<c)k=c;
k+=(a==0?0:b/c);
System.out.println(k);
} 或者这样int foo(int a, int b, int c) {
return (b <c) ? c : (a ? (b+1) : b);
}或者这样int foo(int a, int b, int c)
{
return c==0?b:b+1;
}代码不可能会编译成void foo(int a,int b,int c)
{
int k = b;
if( a == 0) goto _L2; else goto _L1
_L1:
k++;
_L2:
if(k < c) goto _L1; else goto _L3
_L3:
return;
} 编译器不会高明到把几个简单的判断变成循环吧.
int foo2(int k)
{
...do something
}int foo(int a,int b,int c)
{
int k = b;
if( a == 0) goto _L2; else goto _L1
_L1:
foo2(k);
k++;
_L2:
if(k < c) goto _L1; else goto _L3
_L3:
return k;
}//我手动还原后的代码如下:
int foo2(int k)
{
...do something
}int foo(int a,int b,int c)
{
int k = b;
if(a==0)
{
while( k < c )
{
foo2(k);
k++;
}
}
else
{
do
{
foo2(k);
k++;
}while(k < c);
}
return k;
}我相信原始的代码没有这么复杂 请教各位更优的解法
int k = b<c?c:(a==0?b:b+1);
System.out.println(k);
}
//do something
}int foo(int a, int b, int c) {
int k = b;
if (a!=0)
foo2(k++);
while (k<c) foo2(k++);
return k;
}
int k = (a == 0) ? b : b + 1;
while (k < c) k++;
return k;
}或者:public static int foo(int a, int b, int c)
{
int k;
for(k = a == 0 ? b : b + 1; k < c; k++);
return k;
}
public static void foo1(int a,int b,int c){
for ( int k = b; k < c; k = (a!=0?(k+1):k)){
}
}
for (int k=(a!=0?b+1:b); k<c; k++){
}
}
int k = b;
for(k=(a!=0?k+1:k); k<c; k++){
}
return k;
}
这样不知道对不对?void foo(int a, int b, int c) {
int k = b;
if (a != 0) {
k++;
}
while (k < c) {
k++;
}
}