2014-04-11 2 views
0

몇 가지 다른 스택 질문을 살펴 보았습니다.하지만 제가 읽은 것은 실제로 정수 반전을 처리했지만 문자열은 처리하지 않았습니다.회문 수를 확인하기위한 정수 반전

그래서 지금 내 코드가 작동하지 않을 수도 있고, 전혀 작동하지 않을 수도 있습니다. 그리고 그것은 여러분이 본 적이있는 멍청한 것일 수 있습니다. 괜찮습니다. 그리고 수정 사항이 환영 받지만, 제 코드가 수행되기를 바라는 것에서 시작됩니다. 100 ~ 999를 통해 두 int를 곱한 다음 회문색인지 여부를 확인합니다. reverse.equals (sum)를 사용하는 if는 완전히 의사 코드이며 분명히 작동하지 않지만, 회문 int에 대한 검사를 수행하는 방법을 파악할 수는 없습니다. 이 작업을 수행하는 간단한 방법이 있습니까? 꽤 길고 복잡한 몇 가지 방법을 읽었지만 간단한 방법이 있어야합니다. 아마. : /. 어쨌든, 여기 내 코드가있다.

public class PalandromicNum { 
    public static void main(String[] args){ 
     int numOne = 100; 
     int numTwo = 100; 
     int toteVal; 
     int counter = 1000; 
     int sum = 0; 
     int finalSum = 0; 

     for(int i=0; i<counter; i++){ 
      toteVal = numOne * numTwo; 
      numTwo++; 

      if(numTwo == 999){ 
       numOne++; 
       numTwo = 100; 
      } 

      if(toteVal < sum){ 
       sum += toteVal; 
       if(reverse.equals(sum)){ 
        finalSum = sum; 
        System.out.println(finalSum); 
       } 
      } 
     } 
    } 
} 

다시 한번 감사드립니다.

+0

힌트 : 문장은 값을 나타내는 것이 아니라 문자를 나타내는 문자와 관련이 있습니다. 어떻게 '문자열'문자를 함께 사용합니까? – indivisible

+0

예, int를 문자열로 캐스팅 할 수있을 것 같아요. 그냥 캐스팅을하지 않고도 내가 할 수있는 것을보고 싶었을 것입니다. – Kristaphonie

+0

'Integer.toString()'을 http://stackoverflow.com/questions/4138827/check-string-for-palindrome에 접속하면 –

답변

0

정수를 반전하는 것은 매우 쉽습니다. mod 10이 u에 마지막 숫자를 준다는 것을 기억하십시오. 그 위에 반복하여 번호 하나의 마지막 자릿수를 한 번에 잘라 내고 새 번호로 역순으로 추가하십시오. 그렇다면 단순한 문제 integer equality

int rev = 0; 
int n = sum; 
while(n) 
{ 
    rev = rev*10 + n%10; 
    n /= 10; 
} 
if(sum==rev) 
    //palindrome 
else 
    //no no no no. 
2

이것은 매우 오류로 인해 불편을 끼쳐 드려 죄송합니다.

문자열로 전화 번호를 변환하여 :

public static boolean isPalindrome(String str) 
{ 
    // base recursive case 
    if (str.length <= 1) { 
     return true; 
    } 
    // test the first and last characters 
    char firstChar = str.charAt(0); 
    char lastChar = str.charAt(str.length - 1) // subtract 1 as indexes are 0 based 
    if (!firstChar.equals(lastChar)) { 
     return false; 
    } 
    // if the string is longer than 2 chars and both are equal then recursively call with a shorter version 
    // start at 2nd char, end at char before last 
    return isPalindrome(str.substring(1,str.length); 
} 
0

당신은 숫자가 회문 여부를 확인하기 위해 isPalindrome라는 함수를 만들 수 있습니다. 코드에서이 함수를 사용하십시오. 이 기능을 점검하고자하는 번호 만 전달하면됩니다. 결과가 참이면 숫자가 회문입니다. 그렇지 않으면 회문이 아닙니다.

public static boolean isPalindrome(int number) { 
      int palindrome = number; // copied number into variable 
      int reverse = 0; 

      while (palindrome != 0) { 
       int remainder = palindrome % 10; 
       reverse = reverse * 10 + remainder; 
       palindrome = palindrome/10; 
      } 

      // if original and reverse of number is equal means 
      // number is palindrome in Java 
      if (number == reverse) { 
       return true; 
      } 
      return false; 
     } 

    } 
0

나는이 코드가 100-999 사이에 얼마나 많은 팔린 드롬이 있는지 알아 내려고 노력한다면 도움이 될 것이라고 믿는다. 물론, 그것은 회문의 두 순열을 보았 기 때문에 회문을 두 번 계산할 것입니다. 내가 너라면 디버깅이 훨씬 쉬워지면서 대부분의 작업을 완료 할 수있는 방법을 만들기 시작할 것이다.

int total = 100; 
    StringBuilder stringSumForward; 
    StringBuilder stringSumBackward; 
    int numberOfPals = 0; 


    for(int i = 100; i < 999; i++){ 
    for(int j = 100; j < 999; j++){ 
     total = i * j; 
     stringSumForward = new StringBuilder(String.valueOf(total)); 
     stringSumBackward = new StringBuilder(String.valueOf(total)).reverse(); 

     if(stringSumForward.toString().equals(stringSumBackward.toString())){ 
      numberOfPals++; 
     } 
    } 
    }