2013-07-19 4 views
-3

+ = 다른 결과를 생성합니다 아래 코드를 참조하십시오 ... 임시 코드가 올바르게 작동하지 않는 코드는 Java 응용 프로그램을 생성하여 디버깅 할 수 있습니다.Java + = 연산자 "특정 숫자 다음에 추가 중지"

public long JavaStopsAdding(int treeHeight) { 

    long cars = 0; 
    long cars1 = 0; 
    int i = 0; 
    while (treeHeight - i >= 0) { 

     long temp = 0; 

     if (treeHeight - i == 0) { 
      cars += 1; 
      cars1 += 1; 
      break; 
     } 


     // working code start 

      temp = (long) ((Math.pow(2,treeHeight- i))/2); 
     cars1 += temp; 
      System.out.print("temp " + (treeHeight- i) + " cars " + cars1 +"\n"); 
    // working code END 

      // NON working code Start 
      cars += ((Math.pow(2,treeHeight- i))/2); 
    System.out.print("temp " + (treeHeight- i) + " cars " + cars + "\n"); 
     // NON working code END 
     i += 2;  
    } 
    return cars; 
} 
+0

정류장이란 무엇입니까? i/p 및 예상 o/p는 무엇입니까? – NINCOMPOOP

+0

무엇이 문제입니까? 너 뭐하려고? –

+0

당신은'cars + = (long) ((Math.pow (2, treeHeight-i))/2);'시도 했습니까? –

답변

4

대부분 + =에 문제가 없습니다. 대신 문제는 당신의 가치가 넘치고 있다는 것입니다.

Math.pow(2, n)을 사용하지 말고을 사용하는 것이 더 빠르지 만 작동하기 쉽습니다. 어느 쪽이든, n> 62를 가질 수없고 이것이 작동 할 것으로 기대됩니다.

+1

그리고 더 큰'n '은''<< k'가 실패하기 전에'k'가 낮을수록 더 낮을 것입니다. 'n == 1 '이라면''62'까지'k'를 얻고 여전히 복숭아가 될 것입니다. 'n == 4 '이면'k'는'60'이됩니다. 아마도 영업 이익은'BigInteger'를 고려해야 할 것인가? – corsiKa

+0

@corsiKa 또는 비트 세트를 n 번째 비트. –

+0

맞지만 왜 오버플로됩니까? temp가 작동하지만 수학이 직접적으로 작동하지 않습니다 ... – Indra

-1

나는 treeheight = 10으로 코드를 테스트했으며 모든 것이 정상적인 것을 발견했다. 코드에는 두 개의 변수 cars1과 자동차가 포함됩니다.

// working code start 

temp = (long) ((Math.pow(2,treeHeight- i))/2); 
cars1 += temp; 
System.out.print("temp " + (treeHeight- i) + " cars " + cars1 +"\n"); 
// working code END 

// NON working code Start 
     cars += ((Math.pow(2,treeHeight- i))/2); 
System.out.print("temp " + (treeHeight- i) + " cars " + cars + "\n"); 
    // NON working code END 
+0

heigth로 60 번 시도 – Indra

1

BigInteger를 오버플로로 계산 연산으로 사용하십시오.

관련 문제