2010-03-26 5 views
0

n 개의 숫자와 스왑 된 n의 합계가 모두 홀수인지 확인해야합니다. 예를 들어n과 스왑 된 n의 합계의 모든 숫자가 홀수인지 확인합니다.

:

36 + 63 = 99 (도 9 및도 9는 모두 홀수)

409 + 904 = 1313 (1, 3은 모두 홀수)가

비주얼 스튜디오 내 코드를 작성 실행되지만 대답을 반환하지 않습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      long num = Convert.ToInt64(Console.Read()); 
      long vol = voltea(num); 
      long sum = num + vol; 

      bool simp = simpares(sum); 

      if (simp == true) 
       Console.Write("Si"); 
      else 
       Console.Write("No"); 

     } 

     static private bool simpares(long x) 
     { 
      bool s = false; 
      long [] arreglo = new long [1000]; 
      while (x > 0) 
      { 
       arreglo [x % 10] ++; 
       x /=10; 
      } 

      for (long i=0 ; i <= arreglo.Length ; i++) 
      { 
       if (arreglo [i]%2 != 0) 
        s = true; 
      } 
      return s; 
     } 

     static private long voltea(long x) 
     { 
      long v = 0; 

      while (v > 0) 
      { 
       v = 10 * v + x % 10; 
       x /= 10; 
      } 
      return v; 
     } 
    } 
} 
+3

이 숙제가 있습니까? – John

+0

프로그램이 멈추었습니까? – John

+0

무엇을 시도 했습니까? 문제가있는 곳을 격리하기 위해 어떤 노력을 했습니까? – Amir

답변

0

무한 루프와 결코 들어 가지 않는 루프가있는 것처럼 보입니다.

// because v = 0, the while will never execute 
long v = 0; 

while (v > 0) 
{ 
    v = 10 * v + x % 10; 
    x /= 10; 
} 
+3

x는 정수형이므로 잘 리면 결국 0이됩니다. 어떻게 생각합니까? –

+0

@Ben Voigt - 솔직히 나는 모른다. 다시 내 반응을 읽으면서 나는 매우 열중하고있다. –

+0

사실 나는 "voltea"함수의 문제를 지적하고있을 때 문제가 "simpares"함수에 있다고 말하는 것처럼 초기 게시물이기 때문에 혼란이 있다고 생각합니다. 조건부에서 v는 x이어야합니다. – McAden

6

나는 당신의 코드에 문제가 있는지 모르겠지만,이 오히려 10

    에 의해 모든 부서 및 개조를하는 것보다, 문자열을 사용하는 것입니다 달성하기 위해 쉬운 방법을 생각했다
  1. 문자열을 역 문자열로 원래 숫자로 변환 한 후 원래의 추가 긴
  2. 에 그것을 다시 변환 및 역 번호는
  3. 결과 스트를 통해 문자열
  4. 루프에 합 변환 그리고 각 자리가 홀수인지 확인하십시오.
3

"답변을 반환하지 않습니다"라는 것이 너무 명확하지 않습니다.

추가 :

 Console.ReadKey(); 
     Console.ReadLine(); 

자신의 메인 함수의 끝에서. 콘솔이 닫히고 있기 때문에 응답이 표시되지 않는 것 같아요.

편집 :

을 찾았 경계의 밖으로

for (long i=0 ; i <= arreglo.Length ; i++) 

인덱스입니다. 즉,해야한다 :

for (long i=0 ; i < arreglo.Length ; i++) 

은 내가해야 "이하"arreglo하지 "작거나 같음"

EDIT2 : 현재 코드가 깨진 이유

이입니다. 나는 또한 문제를 해결하는 대안적인 방법을 살펴볼 것을 강력히 권고한다. Andy White의 답변을 참조하십시오.

관련 문제