본문 바로가기

프로그래밍/.net

[펌]팰린드롬

/*

누워서 읽는 알고리즘에 본 팰린드롬을 만들어 봤습니다.


ses, 기러기, eye 이런 앞뒤가 바뀌어도 같은 글자가 되는 것을 보고 팰린드롬이라고 한답니다.


정확히 일치하는 것은 아니지만 대부분의 수가 이 팰린드롬을 만족한다고 합니다.


한자리 수는 상관 없겠고


13과 같은 경우


13 + 31


44 가 되어서 만족하고


87의 경우


87 + 78

165 + 561 = 726

726 + 627 = 1353

1353 + 3531 = 4884 가 되어서 만족합니다.


즉 계속 팰린드롬을 수행하면서 연산을 해나가면 언젠가는 팰린드롬을 만족하는 것입니다.


물론 완벽히 적용되는지는 아직 알 수 없다고 합니다. 196을 넣으면 UInt64의 범위가 벗어 나버려서

자바의 경우 더 큰 수 처리를 위한 클래스가 있었는데(쓴지 오래되 클래스 이름조차 기억안남) C#도 물론 있겠죠. (찾아보지 않아서 잘 모르겠슴)


어찌되었던 196은 현재 7천만개의 숫자까지 진행되고 있다고 합니다.


누워서 읽는 알고리즘 재미있네요 이 전에 나온 행복한 프로그래밍도 재미있게 봤었는데...


잡지 마소에 칼럼 1월에 썼던데 이 사람... 프로그래밍 하다 짜증날때 보면 행복해지는 책이 될 것

같습니다.

*/



using System;
namespace Palindrome
{
 class Class1
 {
 
  [STAThread]
  static void Main(string[] args)
  {
   Class1 ob=new Class1();
   string str=null;
   Console.WriteLine("팰린드롬을 계산할 수를 입력하세요");
   
   str=Console.ReadLine();
   
   ulong x=0, y=0;

   x=UInt64.Parse(str);  
   try
   {
    while(true)
    {
     x+=y;

     char[] t=x.ToString().ToCharArray();
     
     Array.Reverse(t);

     y=UInt64.Parse(new string(t));
   
     Console.WriteLine("X={0}\t Y={1}",x,y);
   
     if(ob.isPalindrome(x))
     {
      break;
     }
    }
   }
   catch
   {
    Console.WriteLine("ERROR 발생");
   }
  }

 

  //팰린드롬인지 확인 한다.

  bool isPalindrome(ulong val)
  {

   char[] str= val.ToString().ToCharArray();

   char[] temp=new char[str.Length];
   temp=(char[])str.Clone();

   Array.Reverse(str);

   ulong x=UInt64.Parse(new string(temp));
   ulong y=UInt64.Parse(new string(str));
   
   if(x==y)
   {
    return true;
   }
   else
   {
    return false;
   }
 
  }
 }
}

반응형