이 페이지는 코딩도장 데이터의 읽기 전용 정적 보관본입니다.

Reverse And Add

출처: programming-challenges

일단 어떤 수를 받아서 그 수를 뒤집은 다음 뒤집어진 수를 원래의 수에 더하는 과정을 뒤집어서 더하기라고 부르자. 그 합이 회문(palindrome, 앞뒤 어느 쪽에서 읽어도 같은 말이 되는 어구. 예:eye, madam, 소주만병만주소)이 아니면 회문이 될 때까지 이 과정을 반복한다.

예를 들어 처음에 195에서 시작해서 다음과 같이 네 번 뒤집어서 더하기를 반복하면 9339라는 회문이 만들어진다.

 195      786       1473      5214
+591     +687      +3741     +4125
----     -----     -----     -----
 786     1473       5214      9339

대부분의 정수는 이 방법을 몇 단계만 반복하면 회문이 된다. 하지만 예외도 있다. 회문을 찾을 수 없는 것으로 밝혀진 첫번째 수는 196이다. 하지만 회문이 없다는 것이 증명된 적은 없다.

어떤 수가 주어졌을 때 회문이 있으면 출력하고, 그 회문을 찾기까지 뒤집어서 더하기를 반복한 횟수를 출력하는 프로그램을 만들어야 한다.

테스트 데이터로 사용되는 수는 모두 뒤집어서 더하기를 1,000번 미만 반복해서 회문을 찾을 수 있는 수고, 그렇게 만들어진 회문을 4,294,967,295보다 크지 않다고 가정해도 된다.

Input

첫번째 줄에는 테스트 케이스를 나타내는 정수 N(0<N<=100)이 들어있고, 그 아래로 N개의 줄에 걸쳐서 회문을 구해야 하는 정수가 한 줄에 하나씩 들어있다.

output

N개의 각 정수에 대해 회문을 발견하는 데 필요한 최소한의 반복 횟수를 출력하고, 스페이스를 한 칸 출력한 다음, 그 회문을 출력한다.

Sample Input

3
195
265
750

Sample Output

4 9339
5 45254
3 6666
palindrome

2014/03/14 16:09

pahkey

그럼 자기 자신이 회문이 될 경우는 어떻게 출력하면 될까요? 예를 들어, 101 은 "0 101" 이렇게 하면 되나요.? - 전 수현, 2014/08/03 12:24
네, 이미 회문인 경우는 말씀하신것처럼 반복횟수가 0 이라고 결과를 내는것이 타당하다고 여겨지네요. - pahkey, 2014/08/04 08:43

149개의 풀이가 있습니다.

파이썬3.4입니다. 재귀함수로 풀었어요.

def fnc(n, chk = 0):
    if n == int(str(n)[::-1]): #뒤집은 숫자가 서로 같으면,
        print(chk, n)
    else:
        fnc(n + int(str(n)[::-1]), chk + 1)

fnc(195)
#fnc(195) -> fnc(195 + 591 = 786, 1) -> fnc(786 + 687 = 1473, 2) ->
#fnc(1473 + 3741 = 5214, 3) -> fnc(5214 + 4125 = 9339, 4) -> 종료
fnc(265)
fnc(750)

2016/03/22 23:25

디디

Python 3.6.1 재귀함수, using math.floor, cycle 은 1000번까지로 제한, 1000번이 넘어가면 RecursionError exception 처리

import math


def check_palindrome(str):
    for i in range(math.floor(len(str) / 2)):
        if str[i] != str[-i + -1]:
            return False
    return True


def reverse_and_add(n, in_num_str):
    try:
        if n < 1000:
            if check_palindrome(in_num_str):
                return print("%d %s" % (n, in_num_str))
            else:
                reverse_and_add(n + 1, str(int(in_num_str) + int(in_num_str[::-1])))
    except RecursionError:
        print("No palindrome within 1000 cycle")


how_many = int(input("How many numbers? "))
in_numbers = []

for i in range(how_many):
    in_numbers.append(input("Enter number: "))

for j in in_numbers:
    reverse_and_add(0, j)

실행결과

C:\Users\djju\AppData\Local\Programs\Python\Python36\python.exe C:/Users/djju/PycharmProjects/test/reverse_and_add.py
How many numbers? 5
Enter number: 101
Enter number: 195
Enter number: 265
Enter number: 750
Enter number: 196
0 101
4 9339
5 45254
3 6666
No palindrome within 1000 cycle

2017/05/20 02:01

예강효빠

Java입니다

package h_Reverse_And_Add;
import java.util.Scanner;
public class Reverse_and_add {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int reverse=0,m,i,l, N=in.nextInt();
        int[] input=new int[N]; int[] n=new int[N];

        for(l=0;l<N;l++){
            input[l]=in.nextInt();

            Repeat:
            for(i=0;i<1000;i++){
                //System.out.print(input[l]+" ");

                /*Reverse Algorithm*/
                for(reverse=0,m=1; input[l]/m!=0; m*=10){
                reverse=reverse*10+(input[l]/m)%10;
                if(input[l]/m/10==reverse || input[l]/m/100==reverse ) break Repeat; /*Palindrome Check*/
                }
                /*Reverse Algorithm ends*/

                input[l]+=reverse; /*Add*/

                //System.out.print(reverse+" "); 
            } //System.out.println();
            n[l]=i;         
        }
        for(l=0;l<N;l++) System.out.println(n[l]+" "+input[l]);
    }
}
# 슬래쉬2개 표시 풀고, 입출력한 예시
6
195
195 591 786 687 1473 3741 5214 4125 9339 
265
265 562 827 728 1555 5551 7106 6017 13123 32131 45254 
750
750 57 807 708 1515 5151 6666 
7989
7989 9897 17886 68871 86757 75768 162525 525261 687786 
256
256 652 908 809 1717 7171 8888 
9187
9187 7819 17006 60071 77077 
4 9339
5 45254
3 6666
4 687786
3 8888
2 77077
#알고리즘 혼자서 나름 연구하다가^^
 결국에는 for루프 하나로 줄였지만,
 그 과정에서 만들어본 알고리즘 몇 개 올려봐요 아까워서 ㅋㅋ

int input=20140315; 
int i,l,d,m,reverse=0;
System.out.println("input="+input);

/* l: input의 자릿수 구하기 */
for(i=1,l=1; input/i!=0; i*=10,l++); l--;
System.out.println("l="+l);

/* d=10^(l-1) 즉, l의 자릿수를 가진 10의 제곱수 구하기  */
for(i=0,d=1; i<l-1; d*=10,i++);
System.out.println("d="+d);

/*input을 뒤에서부터 한 숫자씩 분리한 수 구하기 → num[l]에 집어넣기*/
int[] num=new int[l];
for(m=1,i=0; input/m!=0; m*=10,i++) num[i]=(input/m)%10;
for(i=0;i<l;i++) System.out.print("num["+i+"]="+num[i]+" ");
System.out.println();

/* reverse: input과 자릿수가 같은 d=10^(l-1)을 이용하여 input을 뒤집은 수 구하기 */
for(m=1; input/m!=0; m*=10,d/=10) reverse+=((input/m)%10)*d;
System.out.println("reverse="+reverse+"\n");

/*input하나만 가지고 바로 reverse 구하기 ⇒ 최종적으로 쓴 알고리즘*/
for(reverse=0,m=1; input/m!=0; m*=10) reverse=reverse*10+(input/m)%10;
System.out.println("reverse="+reverse);

#위 알고리즘 출력
input=20140315
l=8
d=10000000
num[0]=5 num[1]=1 num[2]=3 num[3]=0 num[4]=4 num[5]=1 num[6]=0 num[7]=2 
reverse=51304102

reverse=51304102

#진짜 제가 쓴 알고리즘(for루프 하나로 줄였습니다 + 회문인지 체크)
/*Reverse Algorithm*/
for(reverse=0,m=1; input[l]/m!=0; m*=10){
reverse=reverse*10+(input[l]/m)%10;
if(input[l]/m/10==reverse || input[l]/m/100==reverse ) break Repeat; /*Palindrome Check*/
}
/*Reverse Algorithm ends*/

2014/03/15 02:11

Katherine

파이썬으로 한번 짜봤습니다

#
# Reverse the number
# Return reversed number
#
def rev_num(number):
    reversed = ''
    lrev_num = list(str(number))
    lrev_num.reverse()
    for c in lrev_num:
        reversed += c
    return int(reversed)

#
# Check the number is palindrome
# Return True/False
#
def chk_palin(n):
    if n == rev_num(n): return True
    else : return False


#
# Iteration Function
# Max Iteration = 999, Max Number = 4,294,967,295
#
def iter(l):

    for count in range(1,1000) :
        if chk_palin(l):
            print("%4d \t %d" % (count - 1, l))
            return
        else :
            l += rev_num(l)

        if l > 4294967295 :
            print("Number is over our range.")
            return

    print("Iteration is over our range.")


#
#--------------------------------------------------------
# Get the number of cases and check its validity
#
while True:
    while True:
        try :
            casenum = int(input("Input the number of test cases(It shoud be less than or equal to 100) : "))
            break
        except (TypeError, ValueError) : print("You typed wrongly.")

    if casenum > 100 or casenum <= 0 :
        print("the number of cases is too large or is not positive!")
    else :
        break

#
# Get the numbers to invest
#
numbers = []

for i in range(0, casenum) :
    while True:
        while True:
            try :
                numbers.append(int(input("Input a positive integer : ")))
                break
            except (TypeError, ValueError) : print("It is not an integer")

        if 4294967295 < numbers[i] or numbers[i] < 0:
            print("The number must be between 0 and 4,294,967,295")
        else :
            break

input("Press any key to see the result")

#
# Run iter(j) Function
#
for j in range(0, casenum) :
    iter(numbers[j])

2014/03/15 07:30

Onkel


def reverse_and_add(n)
  n + n.to_s.reverse.to_i
end

def is_palin?(n)
  ns = n.to_s

  first, last = 0, ns.length-1

  while first < last
    return false if ns[first] != ns[last]
    first += 1
    last -= 1
  end
  true
end

def calc(n)
  i = 0  
  loop do 
   return [i, n] if is_palin?(n)    
   n = reverse_and_add(n)
   i += 1
 end
end

inp = STDIN.read.split(/[\r\n]+/)

n = inp.shift.to_i
n.times do 
  number = inp.shift.to_i
  puts calc(number).join(" ")
end

2014/03/17 14:37

Kim Jaeju

clojure

(ns t1.core
  (:require [clojure.math.numeric-tower :as math]
            [clojure.math.combinatorics :as combo]))

;; ref: https://github.com/clojure/math.numeric-tower
;; ref: https://github.com/clojure/math.combinatorics


(defn p-skeleton
  "
  # >> (p-skeleton 5)
  # ;=> ((1 0 0 0 1) (0 1 0 1 0) (0 0 1 0 0))
  "
  [n]

  (for [x (range n 0 -2)]
    (let [pad (take (/ (- n x) 2) (repeat 0))]
      (if (= x 1)
        (concat pad [1] pad)
        (concat pad [1] (take (- x 2) (repeat 0)) [1] pad)))))


(defn skeleton->num
  "
  # (skeleton->num [0 1 0 1 0])
  # ;=> 1010
  "
  [coll]

  (loop [acc 0 n 0 [f & rst] coll]
    (cond (not f)   acc
          (zero? f) (recur acc (inc n) rst)
          :else     (recur (+ acc (* f (math/expt 10 n)))
                           (inc n)
                           rst))))


(defn prepare-palindrome
  "
  # (prepare-palindrome [101 10])
  # ;=> ((101 202 303 404 505 606 707 808 909) (0 10 20 30 40 50 60 70 80 90))
  "
  [[f & rst]]

  (if (== f 1)
    (list (range 0 10 1))

    (concat (list (range f (* (dec f) 10) f))
            (->> rst (map #(range 0 (* % 10) %))))))


(def sum (partial reduce +))


(defn palindrome-nums
  []
  (->> (iterate inc 1)
       (mapcat (fn [x]
                 (->> x
                      (p-skeleton)
                      (map skeleton->num)
                      (prepare-palindrome)
                      (apply combo/cartesian-product)
                      (map sum))))))


(def pre-set* (time (->> (palindrome-nums)
                         (take-while #(< % 4294967295))
                         (set))))

;>> "Elapsed time: 544.869078 msecs"
;=> #'t1.core/pre-set*

;; (take 10 pre-set*)
;; ;=> (0 3857007583 3620263 869626968 640858046 4884884 762999267 260333062 5650565 1716006171)


(defn palindrome? [n]
  (->> n
       (get pre-set*)
       (some?)))


(defn reverse-n
  "
  # (reverse-n 123450)
  # ;=> 54321
  "
  [n]

  (->> n
       (str)
       (reverse)
       (apply str)
       (re-find #"[1-9]\d*")
       (read-string)))


(defn reverse-and-add
  ([n]
     (reverse-and-add 0 n))

  ([cnt n]
     (when (< cnt 1000)

       (if (palindrome? n)
         [cnt n]

         (let [next-n (+' n (reverse-n n))]
           (recur (inc cnt) next-n))))))


(->> [195 265 750 196 101]
     (map reverse-and-add)
     (time))
;>> "Elapsed time: 0.034175 msecs"
;=> ([4 9339] [5 45254] [3 6666] nil [0 101])

2014/04/02 01:48

김 은평

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reverse_string(char *str) {
    if (str == 0) {
        return;
    }
    if (*str == 0) {
        return;
    }
    char *start = str;
    char *end = start + strlen(str) - 1; /* -1 for \0 */
    char temp;

    while (end > start) {
        /* swap */
        temp = *start;
        *start = *end;
        *end = temp;

        /* move */
        ++start;
        --end;
    }
}

int is_palin(char *str) {
    char *start = str;
    char *end = start + strlen(str) - 1;
    while (end > start) {
        if (*start != *end) {
            return 0;
        }
        ++start;
        --end;
    }
    return 1;
}

int main() {
    int n, p;
    char str[10];
    char palin[10];

    printf("Enter number: ");
    scanf("%d", &n);

    int count = 1;
    while (count <= 1000) {
        sprintf(str, "%d", n);
        reverse_string(str);
        p = n + strtol(str, NULL, 10);

        if (p >= 4294967295 || p < 0) {
            break;
        }

        sprintf(palin, "%d", p);
        if (is_palin(palin)) {
            printf("%d %d \n", count, p);
            break;
        } else {
            n = p;
        }
        count++;
    }
    return 0;
}

2014/04/07 16:32

pahkey

```[파이썬] 재귀로 짜봤어여

def RAA(n,cnt=0):
    cnt += 1
    result = str(n + int(str(n)[::-1]))
    i = 0

    if n < 10:
        return 0

    while i <= len(result)/2 :
        if result[i] != result[-1 - i]:
            RAA(int(result),cnt)
            return 0
        i += 1
    print cnt , int(result)


RAA(3)   
RAA(195)
RAA(265)
RAA(750
4 9339
5 45254
3 6666

2014/04/17 14:49

Starleaguer

package tree;

import java.util.Scanner;

public class ReverseNumber {
    public static void main(String args[]){
        Scanner s=new Scanner(System.in);
        int num=s.nextInt();
        System.out.println(new ReverseNumber().count(num));

    }

    public int count(int num){
        int tmp=0;
        tmp=num;
        while(true){
            if(reverseChk(String.valueOf(tmp)))
                return tmp;
            tmp=tmp+reverseNum(String.valueOf(tmp));
        }
    }

    public int reverseNum(String num){
        StringBuffer sb=new StringBuffer();
        for(int i=num.length()-1;i>=0;i--)
            sb.append(num.charAt(i));
        return Integer.parseInt(sb.toString());
    }

    public boolean reverseChk(String num){
        StringBuffer change=new StringBuffer();
        for(int j=num.length()-1;j>=0;j--)
            change.append(num.charAt(j));
        System.out.println(num+" : "+change.toString());
        return num.equals(change.toString());
    }

}

reverse 숫자 찾기랑 비슷한 문제네요

2014/04/25 13:37

23king

public class Codingdojo {
    public int reverseAndAdd(int num){
        int result = 0;
        int cnt = 0;
        int sum = num;
        while( cnt < 1000 ){
            sum += reverseNumber(sum);
            System.out.println( (cnt+1) + "번째 LOOP "  + sum );
            if( sum == reverseNumber(sum) ){
                return sum;
            }else {
                cnt++;
            }
        }
        return result;
    }

    /**
     * 숫자 뒤집기
     * @param num
     * @return
     */
    public int reverseNumber(int num){
        int reverse = 0;
        int i = 10, j=0, tmp = num;
        int line = 1;
        int val = 1;

        // 자리수 카운트
        while( tmp != 0 ){
            tmp /= i;
            i *= 10;
            line++;
        }

        int[] reverseArr = new int[line];
        // 자리수 만큼 해서 reverse
        while( j < line ){
            reverseArr[j++] = num/val % 10;
            val*=10;
        }

        // reverseArr 배열을 int로 변환
        int k = line-1;
        i = 0;
        while( k >= 0 ){
            reverse += reverseArr[k] * (int)Math.pow(10, i++);
            k--;
        }
        return reverse;
    }
}

풀고보니, 맨 윗분과 풀이가 비슷한 것 같네요, 근데 간결하지는 못하군요 ㅠㅠㅋ

2014/05/22 18:19

이 승효

package algorithms.level2.ing;

import java.util.Scanner;

public class ReverseandAdd {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String reverseandAdd = reverseandAdd(Integer.parseInt(scanner.nextLine()));
        System.out.println(reverseandAdd);
    }

    private static String reverseandAdd(int inputNumber) {
        int MAX = 1000;
        boolean flag = false;
        int i = 0;
        for(i=0; i<MAX; i++){
            int reverse = reverse(inputNumber);
            if(inputNumber == reverse){
                flag = true;
                break;
            }
            inputNumber += reverse;
        }

        if(flag){
            return i + " " + inputNumber;
        }
        return "";
    }

    private static int reverse(int n) {
        int remainder = 0;
        int reverse = 0;

        while(n > 0){
            remainder = n % 10;
            n = n / 10;
            reverse = reverse * 10 + remainder;
        }
        return reverse;
    }
}

2014/08/03 11:59

전 수현

파이썬 3.4 입니다.

def reverse_plus(data):
    start = list(data)
    start.reverse()
    rev = "".join(start)
    data = str(int(data) + int(rev))
    return data

test_num = int(input("How many test do you want?\n"))
test_list = []
for x in range(test_num):
    temp = input()
    test_list.append(temp)    

for data in test_list:
    count = 0
    while data != data[::-1]:
        data = reverse_plus(data)
        count += 1
    print ("%d %s"%(count, data))

2014/09/27 21:05

돌구늬ㅋ~썬


#완전 초보인데 일단 올려봅니다 ㅎㅎ
def Reverse(Num):
    ReverseNum = list(str(Num))
    ReverseNum.reverse()
    ReverseNum = ''.join(ReverseNum)
    return int(ReverseNum)

def Findpalindrome(Num):
    ReverseNumInt = Reverse(Num)
    if Num/ReverseNumInt == 1: return 0 #회문은 자신과 Reverse된 자신을 나누면 1이되므로
    else: return 1

counter = 0
InputNum = int(input("숫자를 입력하세요: "))

if Findpalindrome(InputNum) == 0:
    print("이미 회문 입니다.")
else:
    InputNum = Reverse(InputNum) + InputNum
    counter +=1
    while Findpalindrome(InputNum):
        counter +=1
        if counter > 1000 :
            print("1000번을 넘었습니다.")
            break
        else:
            InputNum = Reverse(InputNum) + InputNum
    print("횟수 %d" %counter)
    print("회문 숫자 : %d" %InputNum)

2014/11/11 21:44

kong byongsoo

파이썬 입니다. 재귀로 만들었습니다.

def func(n, repeat=0, reverse='', isok=1):
  for i in range(len(str(n))):
    reverse = reverse + str(n)[-i-1]
  hap = n + int(reverse); repeat += 1
  for i in range(len(str(hap))/2):
    if str(hap)[i] != str(hap)[-i-1] : isok = 0; break
  if isok : print repeat, hap
  else : func(hap, repeat)

func(195)
func(265)
func(750)

2015/01/10 23:05

Sang Brian

C#으로 작성했습니다. uint를 쓸까 고민하다가 그냥 ulong으로 썼습니다. 재귀 함수를 썼습니다.

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

namespace CodingDojang
{

    class CodingDojang
    {
        static void Main(string[] args)
        {
            ReverseAndAdd.Answer();
        }
    }

    public class ReverseAndAdd
    {

        public class Palindrome
        {

            public string Answer { get; set; }
            public int Count { get; set; }

            public Palindrome(string answer)
            {
                Answer = answer;
                Count = 0;
            }

            public void Increment()
            {
                Count++;
            }

        }

        public static void Answer()
        {

            int number = int.Parse(Console.ReadLine().ToString());

            if (number > 100)
            {
                Console.WriteLine("The maxmium number of inputs is 100.");
                return;
            }

            string temp = Console.ReadLine().ToString();

            List<Palindrome> inputs = new List<Palindrome>(number);

            while (temp.Length > 0)
            {
                Palindrome input = new Palindrome(temp);
                inputs.Add(input);
                temp = Console.ReadLine().ToString();
            }

            if (inputs.Count != number)
            {
                Console.WriteLine
                    ("The number of inputs and the specified number do not match");
                return;
            }

            foreach (var input in inputs)
            {
                ReverseAndAdd(input);

                if (input.Answer.Length > 10)
                    Console.WriteLine(input.Answer);
                else
                    Console.WriteLine(input.Count + " " + input.Answer);

            }

        }

        public static void ReverseAndAdd(Palindrome input)
        {

            string reverse = Reverse(input.Answer);

            // check if palindrome is found
            if (input.Answer == reverse) 
                return;

            // check if the number of times excuted
            if (input.Count >= 1000)
            {
                input.Answer = "Maximum counts reached. Excution halted.";
                return;
            }

            ulong add = Add(input.Answer, reverse);

            // index out of range
            if (add > 4294967295)
            {
                input.Answer = "Maximum palindrome reached. Excution halted.";
                return;
            }

            input.Answer = add.ToString();
            input.Increment();

            ReverseAndAdd(input);

        }

        public static string Reverse(string input)
        {
            return new string(input.Reverse().ToArray());
        }

        public static ulong Add(string input, string reverse)
        {
            return ulong.Parse(input) + ulong.Parse(reverse);
        }

    }

}

2015/01/30 20:41

Straß Böhm Jäger

회문수가 되는 한계 결과값이 2100000000 로 정했습니다. 왜냐하면 제 컴퓨터가 한계값이 2100000000 대에서 나오기 때문입니다. 16MB 라서... c 언어로 작성했습니다

#include <stdio.h>

int main(void)
{
    int arr1[100], arr3[100], arr5[100], arr6[100], arr7[100];
    int a = 0, b = 0, c = 0, d = 0, i = 0, j = 0, k = 0, p = 0, m = 1, s = 0, t = 0, u = 0, v = 0, x = 0, y = 0;

    printf("회문수가 되기위해 몇번 바꾸어진 것인지, 또 그렇게 된 결과의 회문수를 알려주겠다.\n몇 숫자를 테스트 할 지 첫번째 줄에 입력하고\n다음줄부터 그만큼의 테스트 숫자를 각 라인에 입력하여라.\n");
    scanf("%d\n", &a);

    for(i = 0; i < a; i++)
    {
        scanf("%d", &arr7[i]);
    }   

    while(v!=a)
    {
        x = arr7[v];
        s = x;
        y = 0;
        while(1)
        {
            i = 0;
            j = 0;
            t = s;
            while(1)
            {   
                k = s%10;           
                if(s==0)
                    break;  
                arr3[i] = k;
                s = (int) s/10;
                i++;
                j++;
            }
            i = 0;
            j = j-1;
            for(i = 0; i <= j; i++)
            {
                arr5[i] = arr3[i];
                arr6[i] = arr3[j-i];
            }
            i = 0;
            for(i = 0; i <= j; i++)
            {
                if(arr5[i]==arr6[i])
                {               
                    if(i==j)
                        break;
                }
                else
                    break;
            }
            if(arr5[i]==arr6[i])
            {   

                printf("%d %d\n", y, t);            
                break;
            }
            else if(arr5[i]!=arr6[i])
            {                           
                y++;
                i = 0;
                m = 1;
                s = 0;
                for(i = 0; i <= j; i++)
                {
                    arr1[i] = (arr5[i]+arr6[i])*m;
                    m = m*10;
                    s = s+arr1[i];
                }
                if(t>=1050000000)
                {
                    if(s<2100000000)
                        break;
                }
                if(s>2100000000 || s < 0)
                    break;  
            }
        }   
        v++;
    }   
    return 0;
}

2015/04/02 16:52

전승빈

C언어 예외처리는 귀차니즘...

#include <stdio.h>
#include <malloc.h>

int reverse(int num)
{
    int retval = 0;
    while(num > 0){
        retval += (num % 10);
        retval *= 10;
        num /= 10;
    }
    return retval/10;
}

void addReverse(int num,int count)
{
    if(num == reverse(num))printf("%d %d\n",count,num);
    else addReverse((num+reverse(num)),++count);
}

int main()
{
    int i;
    int num;
    int *arry;
    scanf("%d",&num);

    arry = (int*)malloc(sizeof(int)*num);
    for(i = 0 ; i < num ; i++)scanf("%d",&arry[i]);
    for(i = 0 ; i < num ; i++)addReverse(arry[i],0);
    return 0;
}

2015/07/15 10:26

무아딥

public class ReverseAndAdd {
    public static void main(String[] args) {
        int n = 0;
        Scanner sc = new Scanner(System.in);
        n = Integer.parseInt(sc.nextLine());
        int[] num = new int[n];
        for(int i = 0; i < n; i++) {
            num[i] = Integer.parseInt(sc.nextLine());
        }
        sc.close();

        int[] cnt = new int[n];
        int[] res = new int[n];
        for(int i = 0; i < n; i++) {
            while(true) {
                String str = new String(num[i] + "");
                int len = str.length();
                int flag = 0;

                if(num[i] > 9) {
                    for(int j = 0; j < len / 2; j++) {
                        if(str.charAt(j) != str.charAt(len - 1 - j)) {
                            flag = 1;
                            break;
                        }
                    }
                }
                if(flag == 0) {
                    res[i] = Integer.parseInt(str);
                    break;
                } else {
                    num[i] += Integer.parseInt(new StringBuilder(num[i] + "").reverse().toString());
                    cnt[i]++;

                }
            }
        }


        for(int i = 0; i < n; i++) {
            System.out.println(cnt[i] + " " + res[i]);
        }
    }
}

2015/08/03 09:15

고영감


int pali(int input)
{
    int a, b;

    a = input;
    b = 0;

    while (a > 0)
    {
        b *= 10;
        b += a % 10;
        a /= 10;
    }

    return b;
}
void exce45()
{
    int n,count;
    int *arr;

    scanf_s("%d", &n);
    arr = (int *)malloc(sizeof(int) * n);

    for (int i = 0; i < n; i++)
    {
        scanf_s("%d", &arr[i]);
    }

    for (int i = 0; i < n; i++)
    {
        count = 0;
        while (arr[i] != pali(arr[i]))
        {
            count++;
            arr[i] += pali(arr[i]);
        }

        printf("%d %d\n", count, arr[i]);
    }

}

쉽게쉽게 짜봤습니다.

2015/08/17 15:23

조서현

def isPalindrome(n):
    for i in range(0,len(n)/2):
        if n[i]!=n[len(n)-i-1]:return False
    return True

def reverse_add(n):
    cnt=0
    while not isPalindrome(n):
        n=str(int(n)+int(''.join(reversed(n))))
        cnt+=1
    return cnt,n

print reverse_add("159")

짜긴짰는데 맘에들진않네요. 속도를 줄일만한 알고리즘이 생각이 안나네영

2015/12/13 22:46

김 매미

#include <stdio.h>
#include <stdlib.h>

int Reverse(int a);

int main(void)
{

    int i, N, temp, cnt =0;
    int a[]={195, 265, 750, 9239, 35455, 19101, 29372, 37324};
    N = 8;

    for(i=0; i<N; i++){
        temp =a[i];
        cnt =0;
        while(temp != Reverse(temp)) {
            temp += Reverse(temp);
            cnt++;
        }
        printf("%d %d\n", cnt, temp);
    }

    return 0;
}

int Reverse(int a)
{
    int b = 0, c = 0;
    c = a;

    while(c > 0) {
        b = b*10 + c%10;
        c = (c/10);
    }
    return b;
}
  • 입력 부분은 간단히 하드코딩으로 대체했습니다.
  • for loop안에 while loop이 있고, 다시 비교문에서 function call이 빈번하기는 하지만, 코드 자체는 간단하게 작성한 것 같습니다.

2016/01/04 23:27

노형석

def revAdd(n):
    n=str(n)
    r=reduce(lambda x,y:y+x,n)
    if n==r :return (0,n)
    a,b = revAdd(int(n)+int(r))
    return a+1, b

num = input()
p=[raw_input() for i in range(num)]
print 
for e in p:
    a,b = revAdd(e)
    print a,b

2016/01/24 01:00

상파

Ruby

rev_add = ->n { [n, n.reverse].map(&:to_i).sum.to_s }
pal = ->n,cnt=0 { n == n.reverse ? [cnt,n]*' ' : pal[rev_add[n], cnt+1] }
cnt_ops = -> { puts (1..gets.to_i).map { pal[gets.chop] } }

Test

expect( rev_add["195"] ).to eq 786
expect( pal["195"] ).to eq "4 9339"
expect( pal["1"] ).to eq "0 1"
expect(%w(1 195 265 750).map(&pal)).to eq ["0 1","4 9339","5 45254","3 6666"]

# test stdin/out
$stdin = StringIO.new("4\n1\n195\n265\n750\n")
result = "0 1\n" + "4 9339\n" + "5 45254\n" + "3 6666\n"
expect{ cnt_ops.call }.to output(result).to_stdout

Output

# cnt_ops.call
4
1
195
265
750
0 1
4 9339
5 45254
3 6666

2016/03/10 01:18

rk

void reverseAndAdd(int n) {
        int result = 0;
        int count = 0;

        while(true) {
            result = n + reverseNum(n);
            count++;

            if(isPalindrome(result) == true) {
                break;
            }
            n = result;
        }
        System.out.println(count + " " + result);
    }

    private int reverseNum(int n) {
        int result = 0;
        while(n != 0){                          
            result = (result * 10) + (n % 10);
            n = n/10;
        }
        return result;
    }

    private boolean isPalindrome(int n) {
        String s = Integer.toString(n);
        int start = 0;
        int end = s.length()-1;

        while(start < end) {
            if(s.charAt(start) == s.charAt(end)) {
                start++;
                end--;
            }
            else return false;
        }
        return true;
    }

java

2016/03/18 06:06

mozzi

파이썬입니다.

def do(n):
    for i in range(1000):
        m = int(str(n)[::-1])
        if m == n:
            return i, m
        n = m + n
    return None

c = int(input())
s = []
for _ in range(c):
    s.append(int(input()))
print('\n'.join(["{} {}".format(*do(x)) for x in s]))

2016/03/23 11:42

룰루랄라

class over_1000(BaseException):
    def __init__(self):
        pass

def pal_sum(x):
    return x+int(str(x)[::-1])

def find(x):
    i = 0; result = 0
    while 1:
        if str(x) == str(x)[::-1]:
            result = x
            break
        if i>=1000:
            raise over_1000
        x = pal_sum(x)
        i += 1
    return i, result

while __name__ == '__main__':
    samples = []
    for x in range(int(input('>>>'))):
        samples.append(int(input('>>>>>>')))
    for x in samples:
        try:
            print(find(x))
        except over_1000:
            print('Calculated over 1000 times')

파이썬 3.5.1

2016/04/15 12:37

Flair Sizz

#파이썬3.5.1
def do(a):
    c = 0
    while str(a) != str(a)[::-1]:
        a += int(str(a)[::-1])
        c += 1
    return str(c),str(a)

n = int(input())
qu = []
for i in range(n):
    qu.append(int(input()))
for i in qu:
    print(' '.join(do(i)))

2016/04/23 00:12

차우정

Python 3.4.4

count = int(input().split()[0])

for c in range(count):
    n = int(input().split()[0])
    for i in range(1, 1001):
        n = n + int(str(n)[::-1])
        if n == int(str(n)[::-1]):
            print(i, n)
            break

2016/05/16 12:29

SanghoSeo

n=int(input())
numlist=[]
for i in range(n):
    a=input()
    numlist.append(a)

k=1
def cal(a):
    global k
    a=str(int(a)+int(a[::-1]))
    if a==a[::-1]:
        print(k,a)
        return k,a
    else:
        k=k+1
        return cal(a)
for i in numlist:
    print(cal(i))
    k=1

2016/05/28 03:47

Dr.Choi

def rev(x, itr = 0):
    rvx = int(str(x)[::-1])
    if rvx == x: return (itr, x)
    else : return rev(x + rvx, itr + 1)

파이썬입니다. 디디님의 [::-1]을 참조해서 다듬어봤습니다. 저걸 몰라서 for문을 이용해서 각 자리수를 10 ** ( len(x) - i - 1)로 넣어서 합쳤는데, 그럴필요가 없어져 매우 간결해졌습니다.

재귀함수도 이용되었습니다.

2016/06/28 02:19

Park Jay

def rev(n):
    reverse = ''
    lrev_n=list(str(n))
    lrev_n.reverse()
    for c in lrev_n:
        reverse +=c
    return int(reverse)
index=int(input())
for i in range(index):
    num=int(input())
    cnt=0
    while 1:
        num+=rev(num)
        cnt+=1
        if(num==rev(num)):
            print(cnt,num)
            break

2016/09/05 09:42

정석철

왕초보가 만든 자바풀이(믿거나 말거나#3). 소요시간 : 3시간 25분. 숫자뒤집기 알고리즘에 2시간이상 소요.

   public static void main(String[] args) {
        // 테스트 횟수 입력받기
        Scanner sc=new Scanner(System.in);
        System.out.print("1~100까지 임의의 정수를 입력하시오. ");
        int x=sc.nextInt();
        // 테스트에 활용되는 난수를 입력받은 x의 갯수만큼 발생하기
        Random rd=new Random();
        int[] num=new int[x];
        int start=100;
        int end=999;
        for(int i=0;i<x;i++) {
            num[i]=rd.nextInt(end-start+1)+start;
            System.out.println(num[i]);
        }
        // 출력값 얻기
        System.out.println("------------------------------------");
        for(int i=0;i<x;i++) {
            int sub=num[i];
            System.out.print(countNumber(sub)+" ");
            System.out.println(findNumber(sub));
        }
        sc.close();
    }
    //숫자 뒤집기
    public static int reNumber(int num) { 
        int reverse=0;
        while(num!=0) {
            reverse=(reverse*10)+(num%10);
            num/=10;
        }
        return reverse;
    }
    //뒤집기 횟수
    public static int countNumber(int num) {
        int count=0;
        while(num>0) {
            if(num!=reNumber(num)) {
                num+=reNumber(num);
                count++;
            }
            if(num==reNumber(num))
                break;
        }
        return count;
    }
    //회문 발견하기
    public static int findNumber(int num) {
        while(num>0) {
            if(num!=reNumber(num))
                num+=reNumber(num);
            if(num==reNumber(num))
                break;
        }
        return num;
    }

문제점 : 1. countNumber()와 findNUmber()는 사실 동일코드인데 리턴메소드는 하나의 리턴값만 반환한다는 전제하에 복제하여 만듬. 2. 만들어진 x만큼의 정수값(100~999)가 중복될 수도 있음. 중복되지 않게 하는 방법을 몰라서 코드 작성하지 못함.(출력값에 영향을 미치지 않아서 작성하지 않은 이유도 있음)

2016/10/26 21:45

조용택

n = int(input('입력 수 :'))
si = []
r = []
for m in range(n):
    si.append(int(input(str(m + 1) + ':')))

for x in si:
    v = x
    vr = int(str(v)[::-1])
    c = 0
    while v != vr:
        c += 1
        v += vr
        vr = int(str(v)[::-1])
        if c > 1000 or v > 4294967295:
            c = -1
            v = -1
            break
    r.append({'count':c, 'value':v})
print('output')
for rs in r:
    print(rs["count"], rs["value"])

Python 3.5.2에서 작성하였습니다.

2016/11/24 13:06

Yeo HyungGoo

public class Ex19 {

    public String getPalindrome(int value) {
        int count = 0;
        char[] reverseValueChar = String.valueOf(value).toCharArray();
        int reverseValue = 0;
        int result = value;

        while(true) {
            reverseValue = this.getReverseValue(reverseValueChar);
            count++;
            result = result + reverseValue;
            if(this.checkPalindrome(result)) {
                break;
            }else{
                reverseValueChar = String.valueOf(result).toCharArray(); 
            }
        }
        return count +  " " + result;
    }

    public boolean checkPalindrome(int value) {
        boolean isPalindrome = false;
        String forwardValue = String.valueOf(value);
        int reverseValue = this.getReverseValue(forwardValue.toCharArray());

        if(String.valueOf(reverseValue).equals(forwardValue)) {
            isPalindrome = true;
        }

        return isPalindrome;
    }

    public int getReverseValue(char[] forwardValueChar) {
        String reverseValueString = "";

        int reverseValue = 0;
        for(int i = forwardValueChar.length - 1; i >= 0; i--) {
            reverseValueString += String.valueOf(forwardValueChar[i]);
            if(i == 0) {
                reverseValue = Integer.parseInt(reverseValueString);
            }
        }
        return reverseValue;
    }

    public static void main(String[] args) {
        String result = "";
        Ex19 ex19 = new Ex19();
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        for(int i = 0; i < count; i++) {
            int value = scanner.nextInt();
            result += ex19.getPalindrome(value) + "\n";
        }
        System.out.println(result);

    }
}

2016/11/30 18:27

박요한

def is_palin(n):
    f_p = 0
    l_p = len(n) - 1
    for i in n:
        if n[f_p] != n[l_p]:
            return False
        f_p += 1
        l_p -= 1
    return True

def reverse_add(n):
    return str(int(n) + int(n[::-1]))

def recur_cal(n, count = 0):
    if count > 1000 or int(n) > 4294967295:
        return n,count,False
    if is_palin(n):
        return n,count,True
    else:
        return recur_cal(reverse_add(n), count+1)

n = input().split(' ')
res= recur_cal(n[0])
print(res[0], res[1])

2016/12/01 16:34

바바

int reverse(int n)
{
    int rev = 0;

    do
    {
        rev = rev + (n % 10);
        n /= 10;
        rev *= 10;
    } while (n != 0);
    rev /= 10;
    return rev;
}

int main()
{
    int caseN;
    int number, revNumber;
    int count;

    cin >> caseN;
    while (caseN--)
    {
        cin >> number;
        count = 0;

        revNumber = reverse(number);
        while (revNumber != number)
        {
            number += revNumber;
            revNumber = reverse(number);
            count++;
        }

        cout << count << " " << number << endl;
    }
    return 0;
}

2016/12/17 23:26

이 정환

include

include

typedef struct palin { int cnt; unsigned int Num; } Palin;

unsigned int power(int n) { if (n == 0) return 1; return 10*power(n-1); }

unsigned int reverse(unsigned int n) { if ((n >= 0) && (n < 10)) return n; int cnt = 0; unsigned int tmp = n; while (tmp != 0) { tmp /=10; cnt++; } return (n%10)*power(cnt-1)+reverse(n/10); }

int check_palin(unsigned int n) { if (n == reverse(n)) return 1; return 0; }

Palin make_palin(unsigned int n) { Palin tmp; tmp.cnt = 0, tmp.Num = n; if (check_palin(n) != 1) { tmp = make_palin(n+reverse(n)); tmp.cnt += +1; } return tmp; }

int main() { int i, N; Palin pal; scanf("%d", &N); unsigned int arr = (unsigned int)malloc(sizeof(unsigned int)*N); for (i = 0; i < N; i++) { scanf("%u", arr+i); } for (i = 0; i < N; i++) { pal = make_palin(arr[i]); printf("%d %u\n", pal.cnt, pal.Num); } free(arr); return 0; }

2016/12/19 00:41

리코둔

#python 2.7.x 
def palindrome(number):
    palindrome.count += 1
    if number == number[::-1]:
        return number
    else:
        return palindrome(str(int(number) + int(number[::-1])))


#initalize
palindrome.count =0
print (palindrome.count,palindrome("195"))

2016/12/29 16:43

Daniel


#파이썬은 사랑입니다 
#파이썬 2.7.xx
def palindrome(number):
    palindrome.count += 1
    if number == number[::-1]:
        return number
    else:
        return palindrome(str(int(number) + int(number[::-1])))

#initalize
palindrome.count =0
print (palindrome.count,palindrome("195"))


2016/12/29 16:45

Daniel

def find_pali(count,num):
    result = num + int(str(num)[::-1])
    if result == int(str(result)[::-1]):
        return count,result
    else:
        return find_pali(count+1, result)

for num in [int(input()) for x in range(int(input()))]:
    print(find_pali(1,num))

#### 2016.12.30 D-419 ####

2016/12/30 23:28

GunBang

#include<stdio.h>
#include<stdlib.h>
int reverse(int n);
bool verdict(int n);

void main() {
    int n;
    scanf("%d", &n);
    int* output  = (int*) malloc (sizeof(int) * n);
    int* input = (int*) malloc (sizeof(int) * n);
    int* count = (int*) malloc (sizeof(int) * n);

    for(int i=0;i<n;i++) 
        scanf("%d", &input[i]);
    for(int i=0;i<n;i++) 
        count[i] = 0;

    for(int i=0;i<n;i++) {
        output[i] = input[i];
        while(!verdict(output[i])) {
            output[i] = output[i]+reverse(output[i]);
            count[i]++;
        }
    }

    printf("\n");
    for(int i=0;i<n;i++) 
        printf("%d %d\n", count[i], output[i]);
}
bool verdict(int n) {

    int index=0;
    int size=0;
    int temp = n;
    while(temp>0) {
        temp=temp/10;
        size++;
    }
    int* arr = (int*) malloc (sizeof(int) * size);
    while(n>0) {
        arr[index]=n%10;
        n=n/10;
        index++;
    }
    for(int i=0;i<index;i++) {
        if(arr[i]==arr[index-i-1]) continue;
        else return false;
    }
    return true;
}
int reverse(int n) {
    int r = 0;
    while(n>0) {
        r=r+n%10;
        n=n/10;
        r=r*10;
    }
    return r/10;
}

2017/01/19 15:57

코딩초보

import java.util.Scanner;
public class palindrom {
    public static String swap(String s,int i, int j){
        String ret;
        char temp;
        char [] a;
        a= s.toCharArray();
        temp=a[i];
        a[i]= a[j];
        a[j]= temp;
        ret=new String(a);
        return ret;
    }
    public static int _palindrom(int palin){
        String _num=String.valueOf(palin);
        if(_num.length()%2==0){                      //길이 짝수
            for(int i=1;i<=_num.length()/2;i++){
                _num=swap(_num,i-1,_num.length()-i);
            }
        }
        else{                                        //길이 홀수.
            for(int i=1;i<=_num.length()/2;i++){
                _num = swap(_num,i-1,_num.length()-i);
            }
        }
        palin = Integer.parseInt(_num);
        return palin;
    }
    public static boolean _isPalindrom(int pal){
        if(pal==_palindrom(pal)){
            return true;
        }
        else{
            return false;
        }
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int input,i=1,_pal,count=0;
        int [] a ,b;
        System.out.println("회문의 개수를 입력하세요.>");
        input = scan.nextInt();
        a = new int[input];          //반복횟수
        b = new int[input];          //더하기 합.
        while(i<=input){
            _pal=scan.nextInt();
            while(!_isPalindrom(_pal)){
                _pal = _pal+_palindrom(_pal);
                count++;
            }
            a[i-1]= count;
            b[i-1] = _pal; 
            i++;
            count=0;
        }
        for(int j=0;j<a.length;j++){
            System.out.println(a[j]+" "+b[j]);
        }
    }
}

2017/01/31 20:14

primary

swap 함수(두 값교환) 과 팰린드롬을 만드는 함수와 팰린드롬인가를 묻는 함수를 따로 만들어 구현해봤습니다. - primary, 2017/01/31 20:15

#include<stdio.h>

void Reverse_and_add() {
    int a = 0; scanf_s("%d", &a);
    int reverse_num = reverse(a);
    int count = 0;
    for (; a != reverse_num & count < 1000;count++) {
        a += reverse_num;
        reverse_num = reverse(a);
    }
    printf("%d %d\n", count, a);
}
int reverse(int a) {
    int b = 0;
    while (a != 0) {
        b *= 10;
        b += a % 10;
        a /= 10;
    }
    return b;
}
int main() {
    int num = 0;
    scanf_s("%d", &num);
    for (int i = 0; i < num; i++)
        Reverse_and_add();
    return 0;
}

2017/03/05 15:18

KimSeonbin

import java.util.Scanner;

public class ReverseAndAdd {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        for (int i = 0; i < n; i++) {
            reverse(sc.nextLong(), 1);
        }
    }

    private static void reverse(Long t, Integer r) {
        StringBuffer sb = new StringBuffer(t.toString());

        Long k = t + Long.valueOf(sb.reverse().toString());

        StringBuffer sbb = new StringBuffer(String.valueOf(k));

        if (String.valueOf(k).equals(sbb.reverse().toString()) || r > 1000 || t > 4294967294L) {
            System.out.println(r + " " + sbb.toString());
        } else {
            r = r + 1;
            reverse(k, r);
        }
    }
}

2017/03/10 00:44

genius.choi

MATLAB 입니다. num2str, str2num, fliplr (flip left right) 함수를 사용했습니다.

3 195 265 750 4 9339 5 45254 3 6666

결과는 맞게 나오네요.

%%

clear all
close all
clc

%% boundary condition
try_num_max=1000;
current_val_max=4294967295;

%% input
num_of_input=input(' ');
input_vals=zeros(num_of_input,1);

if round(input_vals)~=input_vals
    disp('input integer please..');
    return
end
if input_vals<1 || input_vals>100
    disp('input integer ranging from 1 to 100...');
    return
end

for p=1:num_of_input
    input_vals(p)=input(' ');
end

%%
result_num=zeros(num_of_input,3);
for p=1:num_of_input
    current_val=input_vals(p);
    try_num=0;

    % if it is already symmetric, done
    if strcmp(num2str(current_val),fliplr(num2str(current_val)))==1
        result_num(p,1)=1; % success
        result_num(p,2)=0; % zero trial
        result_num(p,3)=current_val; % result
        continue
    end

    % otherwise...
    while 1
        try_num=try_num+1;

        current_val=current_val + str2num(fliplr(num2str(current_val)));

        if strcmp(num2str(current_val),fliplr(num2str(current_val)))==1
            result_num(p,1)=1; % success
            result_num(p,2)=try_num; % zero trial
            result_num(p,3)=current_val; % result
            break
        end

        % exit condition of while-loop : 1) try_num_max
        if try_num > try_num_max
            result_num(p,1)=0; % failed
            break;
        end

        % exit condition of while-loop : 2) current_val_max
        if current_val > current_val_max
            result_num(p,1)=0; % failed
            break;
        end
    end
end

%% output
for p=1:num_of_input
    if result_num(p,1)==1
        disp(sprintf('%d %d',result_num(p,2),result_num(p,3)));
    end
end

2017/03/21 08:06

c0din9

def reverse(n):
    m=list(str(n))
    m.reverse()
    a="".join(m)
    return int(a)

def examine(n):
    re=reverse(n)
    add1=n+re
    if n==re:
        return 1, n
    i=1
    while add1 != reverse(add1):
        (n,re,add1)=(add1,reverse(add1),add1+reverse(add1))
        i+=1
    return i, add1

examine(195)

2017/05/14 20:41

정세진

class reverse_add:
    def __init__(self, n):
        self.n = str(n)

    def method(self):
        num = self.n
        count = 0; threshold = 4294967295
        while num != num[::-1]:
            a = int(num) + int(num[::-1])
            num = str(a)
            count += 1
            if count > 1000 or int(num) > threshold:
                return None
        return count, int(num)
for i in [195, 265, 750, 196]:
    print('i:',i,"\t",reverse_add(i).method())
'''
i: 195   (4, 9339)
i: 265   (5, 45254)
i: 750   (3, 6666)
i: 196   None
'''

2017/05/26 21:03

겨털에뽀뽀

javascript

var getReverse = n => parseInt([...'' + n].reverse().join(""))
var isPalindrome = n => n === getReverse(n);
var addReverse = n => n + getReverse(n);

var palindrome = function(n) {
    var i = 0;
    while (!isPalindrome(n)) {
        i++;
        n = addReverse(n);
    }
    return [i, n];
};

var main = function(input) {
    var inputs = input.split("\n").map(v => parseInt(v));

    for (let i = 1; i <= inputs[0]; i++) {
        console.log(palindrome(inputs[i]).join(" "));        
    }
}

var input = `3
             195
             265
             750`;

main(input);

2017/06/19 10:28

funnystyle

파이썬 초보자 입니다.

num = input("숫자를 넣으세요 : ")
Running = True
while Running:
    tmp1 = num
    tmp2 = list(str(tmp1))
    tmp2.reverse()

    reversed=""
    for i in tmp2:
        reversed += i
    str2=int(reversed)
    str1=int(tmp1)

    sum = str1+str2

    reversed_sum = list(str(sum))
    reversed_sum.reverse()
    tmp_sum2 =""
    for j in reversed_sum:
        tmp_sum2 += j
    sum2 =int(tmp_sum2)

    if sum == sum2:
        print(sum)
        Running = False
    else :
        num = sum

2017/06/30 23:36

semipooh

Python

nums = [195, 265, 750]

for s in map(str, nums):
    for cnt in range(1000):
        r = ''.join(reversed(s))
        if s == r:
            print(cnt, s)
            break
        s = str(int(s) + int(r))

.

C#

using System.Linq;
using static System.Console;

class Palindrome
{
    static void Main(string[] args)
    {
        int[] input = { 195, 265, 750 };

        foreach (int n in input)
        {
            string s = n.ToString();

            for (int cnt = 0; cnt < 1000; cnt++)
            {
                string r = new string(s.Reverse().ToArray());
                if (s == r)
                {
                    WriteLine("{0} {1}", cnt, s);
                    break;
                }
                s = (int.Parse(s) + int.Parse(r)).ToString();                
            }            
        }
    }
}

2017/07/20 00:29

Noname

def revSum(number):
    iter = 0
    h1 = [0]
    h2 = [1]
    while not h1 == list(reversed(h2)):
        iter += 1
        num_list = [int(a) for a in str(number)]
        rev_num_list = list(reversed(num_list))
        rev_num = int(''.join(map(str,rev_num_list)))
        cur = number + rev_num
        int_list = [int(i) for i in str(cur)]
        cut = len(str(cur))//2
        h1 = int_list[:cut]
        h2 = int_list[-cut:]
        number = cur
    print(iter,cur)

revSum(195)
revSum(265)
revSum(750)

2017/08/08 16:41

이현우

def reverse_and_add(n) :  # 0 < n <= 100
    trying = 1
    while True :
        list_n = list(str(n))
        list_n.reverse()
        reverse_n = int(''.join(list_n))
        result = n + reverse_n

        list_result = list(str(result))
        list_result.reverse()

        if list_result == list(str(result)) :
            break

        else :
            n = result
            trying += 1

    return trying, result

a = int(input("0과 100 사이의 임의의 정수 : "))
for i in reverse_and_add(a) :
    print(i, end=" ")

2017/08/13 11:23

다크엔젤

def palindrome(num):
    count = 1
    while True:
        n1 = num
        n2 = int(''.join(reversed(str(num))))

        n3 = str(n1 + n2)
        n3_1 = n3[0: len(n3) // 2]
        n3_2 = n3[-(len(n3) // 2):]
        num = int(n3)
        if n3_1 == ''.join(reversed(n3_2)):
            break
        else:
            count += 1
        if count >= 1000:
            print('Too many count Exception')
            return
        if num >= 4294967295:
            print('Too many palindrome Exception')
            return
    print(count, num)

n = '0'
while True:
    n = input('테스트 케이스를 나타내는 정수 N(0<N<=100) : ')
    if n != '' and 0<int(n)<=100:
        break

pal_arr = []

for num in range(0,int(n)):
    while True:
        tmp = input('회문을 구해야 하는 정수('+str(num+1)+') : ')
        if tmp != '':
            pal_arr.append(tmp)
            break

for num in pal_arr:
    palindrome(int(num))



2017/08/23 11:27

piko

package codingdojang;

public class ex45 {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    int a = 750;
    int count = 0;
    if(check(a)) {System.out.println(count+ " "+a); return;}
    while(true) {
        count++;
        if(check(a + reverse(a))) {
            System.out.print(count+ " ");
            System.out.println(a+reverse(a));
            return;
        }
        a = a + reverse(a);
    }
}

public static boolean check(int x) {

    String temp = Integer.toString(x);

    for(int i=0; i<temp.length()/2; i++) {
        if(temp.charAt(i) != temp.charAt(temp.length()-1-i)) {
            return false;
        }
    }
    return true;
}

public static int reverse(int x) {

    int reverse = 0;

    while(x != 0) {
        reverse = (reverse*10) + x%10;
        x = x/10;
    }
    return reverse;
}

}

2017/10/10 15:48

이병호

def rev(n):
    reverse = ''
    lrev_n=list(str(n))
    lrev_n.reverse()
    for c in lrev_n:
        reverse +=c
    return int(reverse)
index=int(input())
for i in range(index):
    num=int(input())
    cnt=0
    while 1:
        num+=rev(num)
        cnt+=1
        if(num==rev(num)):
            print(cnt,num)
            break

2017/12/04 16:05

떼디

while True:
    s=input()
    h=s[::-1]
    for i in range(1,1001):
        hap=int(s)+int(h)
        s=str(hap)
        h=s[::-1]
        if str(hap)==str(hap)[::-1]:break
    print(i,hap)    

2017/12/13 23:31

강상욱

def findnum(n, count=0):
    count+=1
    if count>=4294967295:
        raise ValueError
    tmp=n+int(str(n)[::-1])
    if str(tmp)==str(tmp)[::-1]:
        return(count, tmp)
    else: return(findnum(tmp, count))

while True:
    num=int(input())
    nums=[]
    while len(nums)!=num:
        nums.append(int(input()))
    else: break

for i in nums:
    print(findnum(i))

2017/12/15 05:09

빗나감

파이썬 3.6

def inputdata(datalist):
    data = int(input(''))
    datalist.append(data)
    for i in range(data):
        data = int(input(''))
        datalist.append(data)

def main(datalist):
    del datalist[0]
    origin = 0
    reverse_add = 0
    for n in datalist:
        origin = n
        reverse_add = origin + int(str(origin)[::-1])
        m = 1
        while True:
            if reverse_add == int(str(reverse_add)[::-1]):
                print(m,' ',reverse_add)
                break
            else:
                reverse_add = reverse_add + int(str(reverse_add)[::-1])
                m += 1

if __name__ == "__main__":
    datalist = []
    try:
        inputdata(datalist)
    except ValueError:
        print("정수값을 입력하세요")
    print("\n")
    try:
        main(datalist)
    except IndexError:
        pass
  • 결과값
3
195
265
750


4   9339
5   45254
3   6666

2018/01/08 13:34

justbegin

# 파이썬

sample_input = [3, 195, 265, 750]


def raa(n, time=0):
    if n == int(str(n)[::-1]): return n, time
    else:
        n += int(str(n)[::-1])
        time += 1
        return raa(n, time)


print([raa(t) for t in sample_input])


2018/02/07 23:31

olclocr

def reversesum(n):
    m = 0
    for i in range(len(n)):
        m += int(n[i]) * 10**i
    return str(int(n)+m)


i = 0
j = 0


def palindrome(n):
    global i
    global j
    if i >= 1000 or j >= 4294967295:
        return [0, 0]
    elif n == n[::-1]:
        return [0, n]
    else:
        i += 1
        j = int(reversesum(n))
        return [palindrome(reversesum(n))[0]+1, palindrome(reversesum(n))[1]]


a = int(input())
b = list()
while 1:
    b.append(input())
    if len(b) == a:
        break
for i in list(map(palindrome,b)):
    if i[1] == 0:
        i = "no palindrome"
    print(i)

2018/02/11 14:56

김동하

def solve(n):
    if n==n[::-1]:
        return 0,int(n)
    flag = 1
    counter=1
    while flag:
        check=int(n)+int(n[::-1])
        if counter>=1000 or check>4294967295:
            return False
            flag=0
        if str(check)==str(check)[::-1]:
            return counter,check
            flag=0
        else:
            n=str(check)
            counter+=1


N=int(input("입력하려는 숫자 갯수 입력하세요\n"))
num_list=[]
for line in range(N):
    num_list.append(input("숫자를 입력하세요: "))

for num in num_list:
    print(solve(num))



2018/02/19 03:02

D B

파이썬으로 재귀함수를 이용해 작성했습니다.

def palindrome(a):
    mylist=list(str(a[1]))
    mylist.reverse()
    if int(''.join(mylist))==a[1]:
        print(a[0], a[1])
    else:
        return palindrome([a[0]+1, a[1]+int(''.join(mylist))])

d=int(input(''))
pal_list=[]
while d>0:
    pal_list.append([0,int(input(''))])
    d-=1

for m in pal_list:
    palindrome(m)

2018/02/26 16:57

박종범

import java.util.*; public class Main {

public static void main(String[] args) {

    Scanner scanf=new Scanner(System.in);
    int a=scanf.nextInt();
    int b=0;
    int cnt=0;
    StringBuffer sb=new StringBuffer();
    while(true){
            sb.append(a);
            sb.reverse();

            b=a+Integer.parseInt(sb.toString());
            char[] chr=(b+"").toCharArray();
            cnt=cnt+1;
            if(chr[0]==chr[chr.length-1]) {break;}
            else { 
             sb.delete(0, sb.length());
             a=b;
             }
    }
        System.out.println(cnt);
        System.out.println(b);

} }```{.java}

```

2018/02/26 22:06

즈스크

def Palindrome(n, *num) :
    for numb in num :
        count = 0

        while True :
            if str(numb) == str(numb)[::-1] :
                print(count, numb)
                break
            else :
                numb = numb+int(str(numb)[::-1])
                count += 1
                continue        

작성하고 보니 변수n이 입력후 기능을 하지 않네요..

2018/03/08 17:26

박강민

n=input()
a=0
while n != n[::-1]:
    n=str(int(n)+int(n[::-1]))
    a=a+1

print('%d %s'% (a,n))

2018/03/18 04:55

python

n = int(input("test case: "))
number = []
for i in range(0,n):
    number.append(input())
for t in number:
    count = 0
    while t[::-1] != t:
        count += 1
        t = str(int(t[::-1]) + int(t))
    print(count, t)

2018/03/25 01:19

정익수

Python 3

def palindrome(num):
    count = 0
    reverse = num
    while str(reverse) != str(reverse)[::-1]:
        reverse = abs(reverse + int(str(reverse)[::-1]))
        count += 1
    return str(count) + ' ' + str(reverse)
numbers = []
for i in range(int(input())):
    numbers.append(input())
for j in numbers:
    print(palindrome(int(j)))

2018/04/07 22:18

myyh2357

import java.util.Scanner;

public class ReverseAndAdd {

    public static boolean checker(long sum){

        String strSum = sum + "";
        for(int i = 0; i<strSum.length()/2; i++){
            char a = strSum.charAt(i);
            char b = strSum.charAt(strSum.length()-(i+1));
            if(a == b){
                continue;
            }else{
                return false;
            }
        }

        return true;
    }

    public static void execute(long number){
        boolean flag = false;
        long sum = number;
        long count = 0;
        while(!flag){

            count ++;
            long numberCopy = sum;
            long reverseNumber = 0;
            while(numberCopy > 0){
                long i = numberCopy % 10;
                reverseNumber += (i * Math.pow(10, (int)Math.log10(numberCopy)) );
                numberCopy /= 10;
            }

            sum = sum + reverseNumber;
            flag = checker(sum);
        }

        System.out.println(count + " " + sum);

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();

        for(int i=0; i< num; i++){
            long number = sc.nextInt();
            execute(number);
        }
        sc.close();
    }

}

2018/04/09 22:06

김태훈

// Reverse And Add
package main

import (
    "fmt"
    "strconv"
)

func getPalindrome(anInteger uint64) uint64 { // get the palindrome number of anInteger
    iString := fmt.Sprint(anInteger)
    oString := ""
    for _, v := range iString {
        oString = string(v) + oString
    }
    rst, _ := strconv.ParseUint(oString, 10, 64)
    return rst
}

func getNext(anInteger uint64) uint64 { // return anInteger + Palindrome(anInteger)
    return anInteger + getPalindrome(anInteger)
}

func isPalindrome(anInteger uint64) bool { // check if anInteger is a palindrome number
    return anInteger == getPalindrome(anInteger)
}

func getCount(anInteger uint64) (int, uint64) { // return the reverse-counts and the palindrome number
    count := 0
    chk := anInteger
    for {
        if isPalindrome(chk) {
            return count, chk
        } else {
            chk = getNext(chk)
            count++
        }
    }
}

func main() {
    var try int
    fmt.Scanln(&try)
    integers := make([]int, try)
    for i := 0; i < try; i++ {
        fmt.Scanln(&integers[i])
    }
    for _, v := range integers {
        fmt.Println(getCount(uint64(v)))
    }
}

2018/04/10 14:48

mohenjo

public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()); for (int i=0; i<t; i++) { int cnt = 0; int num = Integer.parseInt(br.readLine()); // 처음에 숫자 StringBuffer sb = new StringBuffer(String.valueOf(num)); int number = 0;```{.java} 자바입니다

            while(!sb.toString().equals(sb.reverse().toString())) {
                number = Integer.parseInt(sb.toString()) + Integer.parseInt(sb.reverse().toString());
                sb = new StringBuffer(String.valueOf(number));
                cnt++;
            }
            System.out.println(cnt + " " + number);
        }
    }```{.java}
자바입니다

2018/05/03 10:37

정몽준

public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()); for (int i=0; i<t; i++) { int cnt = 0; int num = Integer.parseInt(br.readLine()); // 처음에 숫자 StringBuffer sb = new StringBuffer(String.valueOf(num)); int number = 0;```{.java} 자바입니다

            while(!sb.toString().equals(sb.reverse().toString())) {
                number = Integer.parseInt(sb.toString()) + Integer.parseInt(sb.reverse().toString());
                sb = new StringBuffer(String.valueOf(number));
                cnt++;
            }
            System.out.println(cnt + " " + number);
        }
    }```{.java}
자바입니다

2018/05/03 10:37

정몽준

public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()); for (int i=0; i<t; i++) { int cnt = 0; int num = Integer.parseInt(br.readLine()); // 처음에 숫자 StringBuffer sb = new StringBuffer(String.valueOf(num)); int number = 0;```{.java} 자바입니다

            while(!sb.toString().equals(sb.reverse().toString())) {
                number = Integer.parseInt(sb.toString()) + Integer.parseInt(sb.reverse().toString());
                sb = new StringBuffer(String.valueOf(number));
                cnt++;
            }
            System.out.println(cnt + " " + number);
        }
    }```{.java}
자바입니다

2018/05/03 10:37

정몽준

public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()); for (int i=0; i<t; i++) { int cnt = 0; int num = Integer.parseInt(br.readLine()); // 처음에 숫자 StringBuffer sb = new StringBuffer(String.valueOf(num)); int number = 0;```{.java} 자바입니다

            while(!sb.toString().equals(sb.reverse().toString())) {
                number = Integer.parseInt(sb.toString()) + Integer.parseInt(sb.reverse().toString());
                sb = new StringBuffer(String.valueOf(number));
                cnt++;
```{.java}
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());
        for (int i=0; i<t; i++) {
            int cnt = 0;
            int num = Integer.parseInt(br.readLine()); // 처음에 숫자
            StringBuffer sb = new StringBuffer(String.valueOf(num));
            int number = 0;
            while(!sb.toString().equals(sb.reverse().toString())) {
                number = Integer.parseInt(sb.toString()) + Integer.parseInt(sb.reverse().toString());
                sb = new StringBuffer(String.valueOf(number));
                cnt++;
            }
            System.out.println(cnt + " " + number);
        }
    }
자바입니다
```         }
            System.out.println(cnt + " " + number);
        }
    }```{.java}
자바입니다

2018/05/03 10:38

정몽준

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());
        for (int i=0; i<t; i++) {
            int cnt = 0;
            int num = Integer.parseInt(br.readLine()); // 처음에 숫자
            StringBuffer sb = new StringBuffer(String.valueOf(num));
            int number = 0;
            while(!sb.toString().equals(sb.reverse().toString())) {
                number = Integer.parseInt(sb.toString()) + Integer.parseInt(sb.reverse().toString());
                sb = new StringBuffer(String.valueOf(number));
                cnt++;
            }
            System.out.println(cnt + " " + number);
        }
    }
자바입니다. 코드 삽입 진짜 더럽게 되네요.

2018/05/03 10:45

정몽준


user_input_lst = [] b = input() count = 0 dic = {}

while True: a = input() user_input_lst.append(a) if len(user_input_lst) == int(b): break

for number in user_input_lst: if number == number[::-1]: dic[number] = 0 continue

while True:
    new_number = int(str(number)) + int(str(number)[::-1])    
    if str(new_number) == str( new_number)[::-1]:
        count += 1
        dic[new_number] = count
        count = 0
        break
    else:
        number = new_number
        count += 1
        continue

for key in dic: print(dic[key],key)

2018/05/06 13:47

최우성

package tree;

import java.util.Scanner;

public class ReverseNumber {
    public static void main(String args[]){
        Scanner s=new Scanner(System.in);
        int num=s.nextInt();
        System.out.println(new ReverseNumber().count(num));

    }

    public int count(int num){
        int tmp=0;
        tmp=num;
        while(true){
            if(reverseChk(String.valueOf(tmp)))
                return tmp;
            tmp=tmp+reverseNum(String.valueOf(tmp));
        }
    }

    public int reverseNum(String num){
        StringBuffer sb=new StringBuffer();
        for(int i=num.length()-1;i>=0;i--)
            sb.append(num.charAt(i));
        return Integer.parseInt(sb.toString());
    }

    public boolean reverseChk(String num){
        StringBuffer change=new StringBuffer();
        for(int j=num.length()-1;j>=0;j--)
            change.append(num.charAt(j));
        System.out.println(num+" : "+change.toString());
        return num.equals(change.toString());
    }

}

2018/05/21 17:06

배혁남

Python

test = [195, 265, 750, 101, 196]
for t in test:
    cnt = 0
    chk = False
    while True:
        if cnt > 1000:
            chk = True
            break
        if str(t) == str(t)[::-1]:
            break
        else:
            cnt += 1
            t += int(str(t)[::-1])
    if chk:
        print("Not possible in 1000 cycles")
    else:
        print(cnt, t)

2018/06/05 14:58

Taesoo Kim

import java.util.Scanner;

public class ReverseAndAdd {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int count = sc.nextInt();
        for (int i = 0; i < count; i++)
            ReverseAndAdd(sc.nextInt(), 0);
    }

    private static void ReverseAndAdd(int num, int count) {
        int reverse = Integer.valueOf(new StringBuffer(num + "").reverse().toString());
        if (num == reverse)
            System.out.println(count + " " + reverse);
        else
            ReverseAndAdd(num + reverse, ++count);
    }
}

2018/06/19 20:44

김지훈

#include<iostream>
#include<cstdlib>
using namespace std;
void output(int num)
{
    char s[100];
    char s_rever[100];
    char tmp;
    bool answer;
    int count = 0, s_count = 0, result = 0, reverse = 0;

    while (true)
    {
        _itoa_s(num, s, 10);

        while (s[count] != '\0')
            count++;
        for (int i = 0; i < count; i++)
            s_rever[i] = s[i];

        for (int i = 0; i < count / 2; i++)
        {
            tmp = s[count - i - 1];
            s[count - i - 1] = s[i];
            s[i] = tmp;
        }
        reverse = atoi(s);

        for (int i = 0; i < count; i++)
        {
            if (s[i] == s_rever[i])
                answer = true;
            else
                answer = false;
            if (!answer)
                break;
        }
        if (answer)
        {
            cout << s_count << " " << num;
            break;
        }
        s_count++;
        count = 0;
        num += reverse;
    }
}
int main()
{
    int size;
    cin >> size;
    int *p = new int[size];

    for (int i = 0; i < size; i++)
        cin >> p[i];

    for (int i = 0; i < size; i++)
        output(p[i]);
    delete[]p;
}

2018/06/23 17:35

Jun ki Kim

# 처음 입력 받은 수만큼 입력 
ns = []
for i in range(int(input())):
    ns.append(input())

# 입력 받은 리스트를 돌려가며 점검
for n in ns: 
    count = 0
    while(n != n[::-1]): # 회문 점검
        n = str(int(n)+ int(n[::-1])) # 회문으로 덧셈
        count += 1 # 횟수마다 카운트 +1
    print(count, n) # 결과 출력

2018/07/01 23:02

재즐보프

파이썬 3

def islol(s):
    if s == s[::-1]:
        return True
    else:
        return False

def fn(n):
    count = 0
    num = n
    re_num = 0
    sum = 0

    if islol(str(n)):
        return 0, n

    while True:
        re_num = int(str(num)[::-1])
        sum = num + re_num
        count += 1
        if count > 1000:
            return -1, n

        if islol(str(sum)):
            return count, sum
        else:
            num = sum

input = """
3
195
265
750
196
"""

data = list(map(int, input.strip().split("\n")))[1:]

for i in data:
    print(fn(i)[0], fn(i)[1])

결과

4 9339
5 45254
3 6666
-1 196

2018/07/14 01:18

WJ K

n = int(input())
ns = []
for _ in range(n): ns.append(input())
print('-----------')
for i in ns:
    count = 0

    while 1:
        if count >= 1000 or int(i) > 4294967295: print('회문을 찾을수 없습니다.'); break
        if i == i[::-1]: print(count,i); break
        count += 1
        i = str(int(i)+int(i[::-1]))

2018/07/15 00:21

Creator

// Reverse And Add
package com.company;
import java.lang.Math;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i = 0; i < n; i++)
        {
            getCount(sc.nextLong());
        }
    }

    public static long getCount(long number)
    {
        long num = number;
        long revNum = getRev(num);
        int count = 0;
        while(true) {
            if (num == revNum)
            {
                System.out.printf("%d %d\n", count, num);
                break;
            }

            else
            {
                num = num + revNum;
                revNum = getRev(num);
                count++;
                if(count > 1000)
                    break;
            }
        }
        return num;
    }

    public static long getRev(long number)
    {
        long num = number;
        long revNum = 0;
        int len = (int)(Math.log10(number) + 1); // 길이
        while(len > 0)
        {
            long one = num % 10;
            num = num / 10;
            revNum += Math.pow(10, (len--)-1) * one;
        }
        return revNum;
    }
}

2018/07/23 15:48

이동수

C#

using System;

namespace CD045
{
    class Program
    {
        static void Main(string[] args)
        {
            int repeat = int.Parse(Console.ReadLine());
            string result = string.Empty;
            for (int i = 0; i < repeat; i++)
            {
                ReverseAndAdd newWork = new ReverseAndAdd(Console.ReadLine());
                result += newWork.Count() + Environment.NewLine;
            }
            Console.WriteLine(result);
        }
    }

    sealed class ReverseAndAdd
    {
        private static bool IsPalindrome(string aNumStr) => aNumStr == ReverseNumStr(aNumStr);

        private static string GenerateNext(string aNumStr) =>
            (uint.Parse(aNumStr) + uint.Parse(ReverseNumStr(aNumStr))).ToString();

        private static string ReverseNumStr(string aNumStr)
        {
            char[] tmpChr = aNumStr.ToCharArray(); Array.Reverse(tmpChr);
            return new string(tmpChr);
        }

        private string checkNumStr;
        private int count = 0; // 제너레이션 반복 횟수

        // 생성자
        public ReverseAndAdd(string aNumStr) => checkNumStr = aNumStr;

        public string Count() // 결과 반환
        {
            while (!IsPalindrome(checkNumStr))
            {
                checkNumStr = GenerateNext(checkNumStr);
                count++;
            }
            return $"{count} {checkNumStr}";
        }
    }
}

2018/09/10 16:45

mohenjo

^^
        static void Main(string[] args)
        {
            int a = 195;
            Function(a);
        }
        static int Function(int a)
        {

            int result = a;

            int count = 0;
            RE:
            string b = new string(result.ToString().ToCharArray().Reverse().ToArray());
            count++;
            result+= int.Parse(b);

             if(result.ToString() == new string(result.ToString().ToCharArray().Reverse().ToArray()))
            {
                Console.WriteLine(count);
                Console.WriteLine(result);
                return count;
            }
             else
            {
                Console.WriteLine(count);
                Console.WriteLine(result);

                goto RE;
            }

        }

2018/09/17 12:21

정우진

#Python 3.6.6

def reverse_number(number):
    reversed_number = ""
    number = list(str(number))  # 반환을 위해 문자열로 전환 및 리스트형으로 변경
    number.reverse()

    for num in number:
        reversed_number += num

    return int(reversed_number)


def is_palindrome(number):
    number1 = number
    number2 = reverse_number(number1)
    result = True if number1 == number2 else False
    return result


def make_palindrome(number):
    sum_number = 0
    loop = 1
    number1 = number

    if number1 < 10: return [0, number]

    while loop < 1001:
        number2 = reverse_number(number1)
        number1 = number1 + number2
        if is_palindrome(number1): break
        loop += 1

    return [loop, number1]

loop_number = int(input())  # 입력 받을 숫자 개수
result = []  # 결과 값을 list로 할당하기 위한 변수

for i in range(1, loop_number+1):
    input_number = int(input())
    result.append(make_palindrome(input_number))

print(result)

'''result
3
195
265
750

[[4, 9339], [5, 45254], [3, 6666]]
'''

2018/10/05 20:13

오왕씨

def Input_Num():
    cnt = input()
    Num = []
    for i in range(0, int(cnt)) :
        Num.append(input())
    return Num


def ReverseAndAdd() :
    Num = Input_Num()
    Result = []
    for i in Num :     
        # 숫자 범위 0~10,000
        if int(i)<0 or int(i)>10000 :
            Result.append("범위를 벗어났습니다.")
            continue
        cnt = 0 
        total = int(i)
        while 1 :
            # 문자열 반대와 비교
            if str(total)[::-1] == str(total) :
                Result.append(str(cnt) +" "+str(total))
                break
            # 회문 범위를 초과한 경우
            elif total > 4294967295 :
                Result.append("회문의 범위를 벗어났습니다.")
                break
            reverse_num = str(total)[::-1]
            total+= int(reverse_num)
            cnt += 1
    print("="*20)
    return "\n".join(Result)

2018/11/05 22:51

쨔이

def num_re(n):
    sn = str(n)
    rn = sn[::-1]
    return int(rn)

line = list(map(int, input().strip().split()))
i, k = line[0], line[1:]

for n in k:
    count = 0
    while 1:
        rn = num_re(n)
        if (n - rn ) == 0:
            break

        n = n + rn
        count += 1

    print(count, n)

2018/11/29 17:18

Dae Su Jeong

n='195'
count=0
f=1

while f:
    n=str(int(n)+int(n[::-1]))
    count+=1

    if n[0] == n[-1] and n[1] == n[-2]:   
        print(count,n)
        f=0 

2018/12/05 15:20

S.H

public class KimSanghyeop
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);

        System.out.print("숫자를 입력하세요 : ");
        String num1 =sc.nextLine(); 
        String num2="";
        int cnt=0;
        int len;
        while(true)
        {
            num2="";

            len= num1.length();
            for(int f1=0;f1<len;f1++)
            {
                num2+=num1.substring(len - 1 -f1, len - f1);
            }

            if(num2.equals(num1))
            {
                break;
            }
            cnt+=1;
            num1 = Integer.toString( Integer.parseInt(num2) + Integer.parseInt(num1)); 
            System.out.println("num1 : "+num1);
        }
        System.out.println("횟수 : "+cnt +" : "+num2);
    }
}

2018/12/18 15:45

김상협

# palindrome 인지 아닌지 판별하는 함수

def palindrome(num):

    num_str = str(num)

    pre_num_str_list = ' '.join(num_str)

    pre_num_str_list = pre_num_str_list.split(' ')


    real_num_str_list = pre_num_str_list[:]

    num_str_reverse = []
    i = len(pre_num_str_list) - 1
    while i >= 0:
        letter = pre_num_str_list.pop(i)

        num_str_reverse.append(letter)
        i -= 1


    if num_str_reverse == real_num_str_list:
        return True
    else:
        return False

# 입력 숫자를 거꾸로 반환해서 돌려주는 프로그램

def reverse_integer(num):
    num_str = str(num)


    i = len(num_str)-1

    reverse_integer_list = []
    while i >= 0:
        l = num_str[i]
        reverse_integer_list.append(l)
        i -= 1

    return int(''.join(reverse_integer_list))


# 최종 palindrome을 만들어주는 프로그램
def make_palindrome(n, num):

    if palindrome(num):
        print(n, " ", num)
        return
    else:
        if num < 2 ** 32 - 1:
            num = reverse_integer(num) + num

            make_palindrome(n+1, num)
        else:
            print('가능한 숫자 영역을 벗어났습니다.')
            return

2019/01/11 18:01

Gerrad kim

파이썬 3.7.2 에서 979 번부터 에러를 인식하므로 978로 했습니다.]

def revanad(n,i = 0):
    if n == int(str(n)[::-1]):
        print(i,n)
    elif i > 977:
        print('FALSE')
    else:
        rn = n + int(str(n)[::-1])
        if rn == int(str(rn)[::-1]):
            print(i+1,rn)
        else:
            revanad(rn,i+1)

2019/01/21 18:51

김영성

def reverse_add(n):
    temp = list(str(n))
    result = ''
    for i in range(len(temp)):
        result += temp.pop()
    return n + int(result)

def is_palindrome(n):
    temp = list(str(n))
    if temp == temp[::-1]:
        return True
    else:
        return False

N = int(input())
S = []
for i in range(N):
    a = int(input())
    S.append(a)

for num in S:
    count = 0
    while True:
        num = reverse_add(num)
        count += 1
        if is_palindrome(num):
            print(count, num)
            break
        else:
            continue

2019/01/27 16:34

D.H.

n=int(input("Input number of trials(1-100): "))
testlist=[]
for i in range(n):
    t=int(input("Input integer: "))
    testlist.append(t)

def palin(n):
    step=0
    while True:
        if str(n)==str(n)[::-1]:
            break
        elif n>4294967295 or step>=1000:
            return 'nopalin'
        else:
            n=n+int(str(n)[::-1])
            step+=1
    return (step,n)

for i in testlist:
    if palin(i)=='nopalin':
        print("No palindrome less than 4294967295 found within 1000 iterations.")
    else:
        print(palin(i)[0],palin(i)[1])

2019/03/14 16:08

ykleeac

Reverse(n) : n을 뒤집는 함수 RA(n) : 뒤집은 수와 자기자신을 더하는 함수 isPalindrome(n) : n이 회문인지 확인하는 함수 makePalindrome(n) : n에 대해 회문이 만들어질때까지 반복하는 함수

def Reverse(n):
    L = list(str(n))
    L.reverse()
    R = ''.join(L)
    R = int(R)
    return R

def RA(n):
    return Reverse(n)+n

def isPalindrome(n):
    if n<10:
        return False
    L = list(str(n))
    for i in range((len(L)//2)+1):
        if L[i] != L[-1-i]:
            return False
    return True

def makePalindrome(n):
    k = 0
    while k<1000:        
        if isPalindrome(n):
            print(k, n)
            return [k, n]
        elif n > 4294967295:
            print("not found")
            return False
        n = RA(n)
        k += 1
    print("not found")
    return False

makePalindrome(750)

2019/04/03 20:36

messi

num=int(input("입력할 정수의 갯수를 입력하시오:"))
nums_list=[]
for x in range(0,num):
    nums_list.append(int(input("정수를 입력하시오:")))
def palindrome(n):
    sum=0
    while(True):
        n_list=[]
        n=str(n)
        n_reverse=""
        reverse_list=[]
        for x in range(0,len(n)):
            n_list.append(n[x])
        for x in range(0,len(n)):
            n_reverse=n_reverse+n_list[len(n)-1-x]
        n=int(n)
        n_reverse=int(n_reverse)
        n=n+n_reverse
        sum=sum+1
        n_list=[]
        n=str(n)
        for x in range(0,len(n)):
            n_list.append(n[x])
        for x in range(0,len(n)):
            reverse_list.append(n[len(n)-1-x])
        if n_list==reverse_list:
            n=int(n)
            print("%d %d"%(sum,n))
            break
for x in range(0,len(nums_list)):
    palindrome(nums_list[x])

2019/04/04 00:08

빅디펜스

n = 195

def Reverse(n):
    iter_num = 0
    while str(n) != str(n)[::-1]:
        n = str(n)
        reverse_n = n[::-1]

        n = int(n) + int(reverse_n)

        iter_num += 1

        if iter_num > 1000:
            break

        if n > 4294967295:
            break

    if str(n) == str(n)[::-1]:
        return iter_num, n

    return '1000 upper', 'No palindrome within 1000 cycle'


import numpy as np
import pandas as pd

N = 10
num_list = np.random.randint(1, 10000, N)

result = []
for i in num_list:
    result.append(Reverse(i))

print('Input : ', list(num_list))
print('Output : ', result)


data = pd.DataFrame(result, index=num_list, columns=['iteration_number', 'Palindrome'])

print(data)

2019/04/27 21:03

김준기

def RAD(s,c):
    if s==s[::-1]:
        ans=[c,s]
        return ans

    rev='';c+=1
    for i in range(len(s)-1,-1,-1):
        rev+=s[i]

    s=str(int(s)+int(rev))
    return RAD(s,c)

test_num=int(input());S='';ekq=''
for i in range(test_num):
    S=input();Ans=RAD(S,0)
    ekq+='횟수:{}회  결과:{}\n'.format(Ans[0],Ans[1])

print(ekq)

일전에 레벨1 문제에서 대칭수를 구하는 문제를 풀 적에 가장 간단한 판별조건 if s==s[::-1] 을 알게 되었읍니다. 오랜만에 보니 반갑군요.^^

2019/05/04 15:32

암살자까마귀

def raa(a):
    count = 0
    b = int(str(a)[::-1])
    while a != b:
        a += b
        b = int(str(a)[::-1])
        count +=1
    return(count,a)

2019/05/07 18:42

조관우

python 3.7입니다.

def rev(n):
    temp=list(str(n))
    temp.reverse()
    return int("".join(temp))

f=open('d://python/suja.txt','r')
g=open('d://python/jasu.txt','w')

su=list(map(int,f.read().strip().split('\n')))
suja=su[1:]

for i in suja:
    ti=0
    while True:
        i=i+rev(i)        
        ti+=1
        if i==rev(i) : break
    g.write(str(ti)+"     ")
    g.write(str(i))
    g.write("\n")

f.close()
g.close()

파일에 있는 data를 읽고, 파일로 출력하는 방법으로 만들었어요. 회문인 숫자가 입력되는 경우랑 무한 loop를 제어하는 부분은 넣지 못했어요.

2019/05/27 22:59

이상무

def raa(n, s=1):
    if s >= 1000: return 'Error'
    n += int(''.join(reversed(str(n))))
    if str(n) == str(n)[::-1]: return s, n
    else: return raa(n, s+1)
>>>196
Traceback (most recent call last):
  File "C:/Projects/CD_lv2/NOTE1.py", line 13, in <module>
    run()
  File "C:/Projects/CD_lv2/NOTE1.py", line 11, in run
    print(raa(n))
  File "C:/Projects/CD_lv2/NOTE1.py", line 5, in raa
    else: return raa(n, s+1)
  File "C:/Projects/CD_lv2/NOTE1.py", line 5, in raa
    else: return raa(n, s+1)
  File "C:/Projects/CD_lv2/NOTE1.py", line 5, in raa
    else: return raa(n, s+1)
  [Previous line repeated 993 more times]
  File "C:/Projects/CD_lv2/NOTE1.py", line 3, in raa
    n += int(''.join(reversed(str(n))))
RecursionError: maximum recursion depth exceeded while getting the str of an object

if s >= 1000: return 'Error' 이게 왜 에러가 날까요.. 다른 부분은 잘 되는데..

2019/06/04 11:31

이진형

def palindrome(n):
    count = 0
    while str(n) != str(n)[: :-1]:
        n += int(str(n)[: :-1])
        count += 1
        if n == 1000:
            break
        else:
            continue
    return str(count) + ' ' + str(n)


input_num = input("몇개의 수를 넣을까요 ? : ")
in_numbers = []
for i in range(int(input_num)):
    in_numbers.append(input("숫자를 입력하세요 : "))
for j in in_numbers:
    print(palindrome(int(j)))

2019/09/23 21:25

황수빈

a = int(input("숫자를 입력하시오 : ")) num = -1

for i in range(10): num += 1 reverse = int(str(a)[::-1])
if a == reverse : print(num) break a = a + reverse print(a)

2019/10/11 06:03

김민규


def Reverse(data):
    Run = True
    count = 1
    result = data
    while Run:
        str_data = str(data)
        re_str_data = str_data[::-1]
        re_int_data = int(re_str_data)
        data = data + re_int_data
        str_data = str(data)

        if str_data == str_data[::-1]:
            #print("{}, {}".format(count, str_data))
            return count, str_data
            Run = False
        else :
            count +=1

n = int(input("횟수 입력 : "))
for i in range(n):
    value = int(input("숫자 입력 : "))
    result1, result2  = Reverse(value)
    print("{},{}".format(result1, result2))

2019/10/30 22:51

semipooh

import java.util.*;
public class ReverseAndAdd {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int 횟수 = scan.nextInt();
        int nums[] = new int[횟수];
        for(int i=0; i<횟수; i++) {
            nums[i] = scan.nextInt();
        }
        for(int j=0; j<nums.length; j++) {
            int reversed = 0;
            int a = nums[j];
            while(a!=0) {
                int digit = a%10;
                reversed = reversed*10+digit;
                a/=10;
            }
            int n=nums[j]+reversed;
            if(nums[j]==reversed) {
                System.out.println(0 + " " + nums[j]);
                continue;
            }
            int count = 1;
            for(int k=0; k<1001; k++) {
                int b =n;
                reversed = 0;
                while(b!=0) {
                    int digit = b%10;
                    reversed = reversed*10+digit;
                    b/=10;
                }
                if(n==reversed) {
                    System.out.println(count + " " + n);
                    break;
                }
                else {
                    n = n+reversed;
                    count++;
                }
            }
        }
    }
}

2019/11/18 20:43

big Ko

include

include

include

using namespace std;

bool isPalindrome(int number){

stringstream ss;
ss << number;
string str = ss.str();

int size=str.length();
for(int i=0;i<size;i++){
    if(str[i]!=str[size-i-1])
        return false;
}
return true;

}

int* ReverseAndAdd(int number){ int result=0;

while(!isPalindrome(number)){
    result++;
    int n=number;
    int reversedNumber = 0, remainder;
    while(n != 0)
    {
        remainder = n%10;
        reversedNumber = reversedNumber*10 + remainder;
        n /= 10;
    }
    number+=reversedNumber;
}
int arr[]={result,number};
return arr;

}

int main(void){

int N=0;

cin >> N;

for(int i=0;i<N;i++){
    int num;
    cin>>num;
    int* arr=ReverseAndAdd(num);
    printf("%d %d\n",arr[0],arr[1]);
}

}

2019/11/19 10:16

채희범

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int input_count = int.Parse(Console.ReadLine());
            for (int i = 0; i < input_count; i++)
            {
                Reverse_and_add(int.Parse(Console.ReadLine()));
            }
        }
        static void Reverse_and_add(int input)
        {
            bool palindrome = false; // 회문 참 거짓
            int count = 0; // 횟수
            while (palindrome == false)
            {
                string input_reverse = ""; // 입력값 거꾸로
                int temp = input; // input값을 리버스 하기 위한 변수
                for (int i = 0; i < input.ToString().Length; i++)
                {
                    input_reverse = input_reverse.Insert(i, (temp % 10).ToString());
                    temp /= 10;
                }
                if (input.ToString() == input_reverse) // 회문이면 palindrome = true 
                {
                    palindrome = true;
                    break;
                }
                input = (input + int.Parse(input_reverse));
                count++;
            }
            Console.Write(count + " ");
            Console.WriteLine(input);
        }
    }
}

2019/11/20 18:15

bat

inp1, inp_LIST = int(input("INPUT(N) : ")), []

def dis(num, n) :
    if str(num) == "".join(reversed(list(str(num)))) :
        print(n, num)
    else :
        return dis(num+int("".join(reversed(list(str(num))))), n+1)

for a in range(0, inp1) :
    inp_LIST.append(int(input("INPUT(NUMBER) : ")))
for b in inp_LIST :
    dis(b, 0)

결과

INPUT(N) : 3
INPUT(NUMBER) : 195
INPUT(NUMBER) : 265
INPUT(NUMBER) : 750
4 9339
5 45254
3 6666

2019/12/12 17:11

GG

k=int(input("몇 개의 숫자를 입력하겠습니까? "))
elst=[]
for i in range(k):
    num=int(input("숫자를 입력하십시오: "))
    elst.append(num)

def pldrm(num):
    T=0
    while True:
        if str(num)==str(num)[::-1]:
            return " ".join([str(T), str(num)])
        num=num+int(str(num)[::-1])
        T+=1
        if T==1000:
            return "Tried 1000 times but No Palindrome"

for num in elst:
    print(pldrm(num))

2020/01/16 16:32

박시원

testcase = int(input('testcase:'))
numbers =[]

def reverse_and_add(n):
    rev = str(n)[::-1]
    cnt=0

    while str(n)!=rev:
        n= str(int(n)+int(rev))
        rev= n[::-1]
        cnt+=1

    print(cnt, n)


for i in range(testcase):
    numbers.append(input("num:"))

for j in numbers:
    reverse_and_add(j)

2020/03/14 15:11

황예진

#파이썬
#이정도 까지는 안해도 될것 같은데,
#제가 좀 어렵게 푼것 같네요...ㅜㅜ

from math import *

def rvs(a): #숫자를 반대로 뒤집어 주는 함수
    arvs,rvsnum=[],0
    for i in range (len(str(a))):
        arvs.append(str(a)[i])

    for i in range(0,ceil(len(str(a))/2)):
        temp=arvs[i]
        arvs[i]=arvs[len(arvs)-1-i]
        arvs[len(arvs)-1-i]=temp

    for i in range(len(arvs)):
        rvsnum+=int(arvs[len(arvs)-1-i])*(10**i)

    return (rvsnum)

def checknum(a): #숫자가 회문인지를 판별해주는 함수 (회문 : 1, 회문아님 : 0)
    arvs,chk=[],0
    for i in range (len(str(a))):
        arvs.append(str(a)[i]) 

    for i in range(0,ceil(len(str(a))/2)):
        if arvs[i] == arvs[len(arvs)-1-i]:
            chk+=1

    if ceil(len(str(a))/2) == chk:
        return 1
    else:
        return 0

n,nn=int(input('n=')),[]
if n>0 and n<100:
    for i in range (n):
        nn.append(int(input()))

    for i in range (n):
        j,sum=0,0
        num=nn[i]
        while (j<1000 and checknum(num)!=1): #반복횟수j가 1000미만이고 회문이 아닐경우 반복
            j+=1
            num=num+rvs(num)

        if j>=1000:
            print(nn[i],'......','1000번 이상 반복하였습니다')
        elif j==0:
            print(nn[i],'......','입력한 숫자가 회문입니다')
        else:
            print(nn[i],'......',j,num)

2020/04/09 16:19

Buckshot

<결과> n=6 195 196 265 750 88888 19 195 ...... 4 9339 196 ...... 1000번 이상 반복하였습니다 265 ...... 5 45254 750 ...... 3 6666 88888 ...... 입력한 숫자가 회문입니다 19 ...... 2 121 - Buckshot, 2020/04/09 16:19
import random
import string

def three_digit_create(dig, num):
# 테스트할 정수를 생성하는 함수
    test_input = []
    string_pool = '123456789'
    for i in range(num):            # num: 테스트 반복 횟수
        result = ''
        for j in range(dig):        # dig: 난수 자릿수
            if j == 0:
                result += random.choice(string_pool)
            else:
                result += random.choice(string.digits)
        test_input.append(result)
    print(test_input)
    return test_input


def calc(t_input):
    for i in t_input:
        chk(1, i)

def chk(chk_num, p):
    pal = str(int(p) + int(p[::-1]))
    try:
        if pal == pal[::-1]:
            return print(chk_num, pal)
        else:
            chk(chk_num + 1, pal)
    except RecursionError:
        print('Over the recursion limits....')


def main():
    #dig, num = map(int, input('반복 할 입력수의 자릿수와 테스트 횟수를 입력하세요: ').split())
    dig, num = 3, 3
    calc(three_digit_create(dig, num))

if __name__ == '__main__':
    chk_num = 0
    main()

2020/04/16 22:28

Hwaseong Nam

import random
import string

def three_digit_create(dig, num):
# 테스트할 정수를 생성하는 함수
    test_input = []
    string_pool = '123456789'
    for i in range(num):            # num: 테스트 반복 횟수
        result = ''
        for j in range(dig):        # dig: 난수 자릿수
            if j == 0:
                result += random.choice(string_pool)
            else:
                result += random.choice(string.digits)
        test_input.append(result)
    print(test_input)
    return test_input


def calc(t_input):
    for i in t_input:
        chk(1, i)

def chk(chk_num, p):
    pal = str(int(p) + int(p[::-1]))
    try:
        if pal == pal[::-1]:
            return print(chk_num, pal)
        else:
            chk(chk_num + 1, pal)
    except RecursionError:
        print('Over the recursion limits....')


def main():
    dig, num = map(int, input('반복 할 입력수의 자릿수와 테스트 횟수를 입력하세요: ').split())
    calc(three_digit_create(dig, num))

if __name__ == '__main__':
    main()

2020/04/16 22:28

Hwaseong Nam

def check_num(num, cnt=1):
    if cnt == 1 and str(num) == str(num)[::-1]:
        print(num, ': It is already palindrome')
        return 

    sum = 0
    sum = num + int(str(num)[::-1])

    if str(sum) == str(sum)[::-1]:
        print(cnt, sum)
        return 
    else:
        try:
            check_num(sum, cnt+1)
        except:
            print('There is no palindrome within 1000 cycle' )


check_num(101)
check_num(195)
check_num(265)
check_num(750)
check_num(196)

이 문제를 하면서 재귀함수가 1000번 이상 실행되지 않는다는걸 알게되었네요 ^^;;;

2020/04/28 10:49

잘해보자



def revadd(s):

    if s!=s[::-1]:
        s2= str(int(s)+int(s[::-1]))
        print(s,' + ',s[::-1],' = ',s2)
        revadd(s2)
    else:
        print('final number : ',s)

s=input('숫자입력 :')
revadd(s)

2020/04/29 21:28

양양짹짹

def palindrome(num):
    T=1
    for i in range(len(num)//2):
        if num[i]!=num[len(num)-i-1]:
            T=0
            break
    return T
def Reversed(num):
    num2=""
    for i in range(len(num)):
        num2+=num[len(num)-i-1]
    return int(num2)

num=int(input("정수 입력:"))
count=0
while palindrome(str(num))!=1:
    num2=Reversed(str(num))
    count+=1
    num+=num2
print(count,num)

2020/05/02 22:11

kim center

def sample(a):
    b = str(a)
    count = 0
    while b != b[::-1]:
        b = str((int(b) + int(b[::-1])))
        count += 1
    return print(count, b)

2020/05/12 00:08

Money_Coding

python3.7


num = int(input())
n = 0
for i in range(num):
    nustr = input()
    cnt = 0
    su = 0

    while True:
        nu1 = int(nustr)
        nu2 = [nustr[-x] for x in range(1, len(nustr)+1)]
        nu2 = int(''.join(nu2))
        su = int(su)
        su = sum([nu1, nu2])
        cnt += 1
        su = str(su)
        nustr = su
        a = [su[x]==su[len(su)-x-1] for x in range(len(su))]
        b = [True for x in range(len(su))]
        if a == b:
            print(cnt, su)
            break

2020/06/01 16:22

김태준

파이썬3입니다.

import random as r

n = r.randint(1, 4294967295)
loop = n + int(str(n)[::-1])
i = 1

for x in range(10):
    if str(loop) == str(loop)[::-1]:
        break
    else:
        if i == 1000 :
            print('1000 cycle processed. Terminating the process')
            break
        loop += int(str(loop)[::-1])
        i += 1

print(f'Input integer is {n}')
print(i, loop)

2020/06/19 11:55

누마루

func solution(inputStr:String) {
    let arr = inputStr.components(separatedBy: "\n")
    guard let loopCnt:Int = Int(arr[0]) else {print("error"); return}
    for i in 0..<loopCnt {
        var cnt:Int = 0
        guard var currentValue:String = arr[i+1] else { print("error") ; return }
        while true {
            if isCircular(input: currentValue) {
                break
            }
            else {
                let reverse = currentValue.reversed()
                guard let currentInt = Int(currentValue) else { print("error") ; break }
                guard let reverseInt = Int(String(reverse)) else { print("error") ; break }
                currentValue = String(currentInt + reverseInt)
                cnt += 1
            }
        }
        print("\(cnt) \(currentValue)")
    }
}

func isCircular(input:String) -> Bool {
    var result:Bool = false
    let revisionValue:Int = input.count%2 == 1 ? 0 : 1
    let startIndex = input.startIndex
    let endIndex = input.index(startIndex, offsetBy: ((input.count/2)))
    let firstStr = input[startIndex..<endIndex]

    let newStartIndex = input.index(startIndex, offsetBy: ((input.count/2) + 1 - revisionValue))
    let newEndIndex = input.endIndex
    let secondStr = input[newStartIndex..<newEndIndex]
    let reversSecondStr = secondStr.reversed()
    if String(firstStr) == String(reversSecondStr) {
        result = true
    }
    return result
}

solution(inputStr: "3\n195\n265\n750")

2020/07/24 23:03

이한위

import java.util.*;

public class Test {
    public static int reverse(int input) {
        int result = 0;
        while(input != 0) {
            result = result * 10 + input % 10;
            input /= 10;
        }
        return result;
    }


    public static void main(String[] args) {
        int k = 0;
        int i = 0;
        Scanner sc = new Scanner(System.in);
        int input = sc.nextInt();


        while(true) {
            k = input + reverse(input);
            input = k;
            i++;
            StringBuilder a = new StringBuilder(Integer.toString(k));
            StringBuilder b = new StringBuilder(a).reverse();

            if(a.substring(0,a.length()/2).equals(b.substring(0,b.length()/2))) {
                System.out.println(i+" "+k);
                break;
            }
        sc.close();
        }
    }
}

2020/08/31 20:30

들산

while True:
    times=int(input())
    if 0<times<=100:
        break
    else:
        print('다시')

test_sample=[]
for x in range(times):
    test_sample.append(input())

for x in test_sample:
    count=1
    while True:
        if x==x[::-1]:
            print(count,x)
            break

        x=int(x)+int(x[::-1])
        x=str(x)
        count+=1
        if count==1000:
            break
        if int(x)>4294967295:
            break

파이썬 입니다~

2020/10/25 22:22

안녕하세요

def reverseAdd(n):
    count = 0
    while 1:
        temp = n + int(str(n)[-1::-1])
        count += 1
        if str(temp) == str(temp)[-1::-1]:
            print(count)
            break
        n = temp

reverseAdd(195)
reverseAdd(265)
reverseAdd(750)

2020/11/24 17:38

김우석

def reverse(number):
    num = list(str(number))
    reverse_num = num[-1::-1]
    return ''.join(reverse_num)

def reverseadd(number):
    n1 = int(number)
    n2 = int(reverse(n1))
    # print(n1, n2)
    count = 0
    while count < 1000 :
        if n1 == n2:
            print('FOUND for input {} : {} / Count: {}'.format(number, n1, count))
            break
        else:
            n1 += n2
            n2 = int(reverse(n1))
            count += 1

reverseadd(750)

2020/12/14 08:37

DSHIN

def pal(number):

  if number==int(str(number)[::-1]):

    return True

  else:

    return False

def Reverse_and_add(number):

  count=0

  while pal(number)!=True:

    number+=int(str(number)[::-1])

  return number

def program():

  howmany=int(input("write number you will repeat"))

  for_answer=[]

  for i in range(howmany):

    numbers=int(input("write {0} word".format(i)))

    answer=Reverse_and_add(numbers)

    q=[]

    q.append(numbers)

    q.append(answer)

    for_answer.append(q)

  for i in range(len(for_answer)):

    print("{0} {1}".format(for_answer[i][0],for_answer[i][1]))

program()

2020/12/17 18:26

전준혁

def RA(data):  
    for i in data[1:]:
        count = 0

        while True:
            r = ''.join(reversed(str(i)))
            if i==int(r):
                print('{} {}'.format(count,i))
                break
            i+=int(r)
            count+=1            

2021/01/03 22:17

hankyu

n = int(input())
for i in range(0,n):
    count = 0
    num = input()
    while True:
        if(num == num[-1::-1]):
            print("{count} {num}".format(count = count, num = num))
            break
        num = str(int(num) + int(num[-1::-1]))
        count += 1 

파이썬은 자료 만지기 편하네요 너무좋아

2021/01/11 12:23

guma go

def ReverseAndAdd(num):
    count=0
    a =int(num)+int(num[::-1])
    while True:
        if str(a)[::-1]==str(a) and count==0:
            print("%d %d" %(count,a))
            break
        elif str(a)[::-1]==str(a):
            count+=1
            print("%d %d" %(count,a))
            break
        else:
            count+=1
            a+=int(str(a)[::-1])



ReverseAndAdd(input("회문을 알 숫자를 대입하세요 : "))

2021/02/20 20:01

fox.j

def makeAns(n, r=1):
    def makeRotate(num):
        num_ = [j for j in str(num)]
        num_.reverse()
        num_ = "".join(num_)
        return int(num_)

    n2 = makeRotate(n)
    n3 = n + n2

    if n3 != makeRotate(n3):
        makeAns(n3, r + 1)
    else:
        print(r, n3)


makeAns(195)
makeAns(265)
makeAns(750)

결과
4 9339
5 45254
3 6666

2021/04/26 17:22

와장창

def ispalindrome(s):
    return str(s) == str(s)[::-1]

n = int(input())
inputs = [int(input()) for i in range(n)]

for i in inputs:
    count = 0
    result = 0
    while True:
        count += 1
        result = i+int(str(i)[::-1])
        if ispalindrome(result):
            break
        else:
            i = result
    print("{} {}".format(count,result))

2021/05/02 12:58

최태호

def raa(num):
    n = 0
    while 1 :
        if num==num[::-1] :
            print(f'{n} {num}')
            break
        else :
            num = int(num)+int(num[::-1])
            num = str(num)
            n+=1

test = input('test로 1~100사이 숫자를 입력하세요:')

if 0<int(test)<=100 :
    while 1:
        n = input('뒤집어 더할수 :')
        if n == 0: break
        raa(n)

2021/05/26 16:54

약사의혼자말

def pali(n):
    times = 0
    while True:
        a = [i for i in str(n)]
        if not a[:] == a[::-1]:
            b = int(''.join(a[::-1]))
            n += b
            times += 1
        else: break
    return print(f'{times} {n}')

pali(750)

2021/06/05 21:41

ss2663

#codingdojing_reverse_add

import sys

input_list = input("n, numbers: ").split()
input_list = list(map(int, input_list))
N = input_list[0]

if N != len(input_list) - 1:        
    print("input error, N numbers.")
    sys.exit()

for num in input_list[1:]:      #각각의 숫자들에 대해
    count = 0

    while True:
        count += 1
        num += int(str(num)[::-1]) #palindrome

        if str(num) == str(num)[::-1]:
            print(count, num)
            break

2021/07/29 16:33

Jaeman Lee

def symetry(x):
    n = str(x)
    count = 0
    while True :
        if n[0 : len(n)//2] == n[ -1: ((len(n)- 1)//2)  : -1 ]:
            print(count, int(n))
            break
        else : 
            revrn = n[ : : -1]
            n = str(int(n) + int(revrn))
            count += 1
            continue
num = int(input(""))
numlist =  [input("") for x in range(0,num)] 
for x in numlist :
    symetry(x)

2021/08/28 17:21

//python

data = '3 195 265 750'.split()

for i in range(1,int(data[0])+1):
    count = 0
    while True:
        count += 1
        d11 = int(data[i]) + int(data[i][::-1])
        data[i] = str(d11)
        if str(d11) == str(d11)[::-1]:
            print(count,d11)
            break

2021/08/30 16:25

한고선

#Reverse and Add

def ReverseAndAdd(n):
  numbers = 0
  while True:
    n_str = str(n)
    R = int(n_str[::-1]) + n
    numbers += 1
    n = R
    if str(R) == str(R)[::-1]:
      break
  print('%d %d' %(numbers, R))


ReverseAndAdd(750)

2021/09/06 15:19

김동현

def reverse (a) : 
  b = int("".join(list(reversed(str(a)))))
  return b

def palindrome (a) :
  sum =0
  n = 0
  while True :
    sum = a + reverse(a)
    a = sum
    n +=1
    if a == reverse(a) :
      return n , a
      break


while True :  
  n = int(input("몇개의 숫자를 진행 하겠습니까?"))
  if n>0 and n<=100 :
    break

arr_n = []
arr_a = []

for k in range(n) :
  a = int(input("회문을 구할 숫자는?"))
  b = palindrome(a)
  arr_n.append(b[0])
  arr_a.append(b[1])

for k in range(len(arr_n)) :
  print(arr_n[k]," ",arr_a[k])

2021/12/24 02:03

양캠부부


def palindrome(num_str,count=0):
    if num_str == num_str[-1::-1]: return (count,num_str)

    num_str = str( int(num_str) + int(num_str[-1::-1]) )
    count += 1
    return palindrome(num_str,count)


count = int(input())
_input_list = []

#입력
for i in range(0,count):
    _input = input()
    _input_list.append(_input)

#풀이
for i in _input_list:
    print( palindrome(i))



2022/01/09 15:08

강태호

// Rust

fn reverse_add_palindrome(n: usize) -> (usize, usize) {

let mut count: usize = 0;
let mut n_ = n;    
while n_ != reverse_num(n_) {
    count += 1;
    n_ += reverse_num(n_);
}
(count, n_)

}

fn reverse_num(n: usize) -> usize {

return n.to_string().chars().rev().collect::().parse::().unwrap(); }

2022/01/27 15:01

JW KIM

a= '''3
195
265
750'''

def RevAdd(a):
    n=0
    while int(a) != int(a[::-1]):
        n=n+1
        a = str( int(a) + int(a[::-1]))

    print(n, int(a))

for i in range(1,len(a.split('\n'))):
    RevAdd(a.split('\n')[i])

2022/02/09 13:45

로만가

package org.javaturotials.ex;
import java.util.*;
import java.util.stream.Collectors;

public class test {
    public static void main(String[] args) {    
        Scanner sc =new Scanner(System.in);
        int num = sc.nextInt();
        for(int i=0; i<num; i++) {
            int count=0;
            int big=0;
            int first = sc.nextInt();
            while(true) {
                String str = String.valueOf(first);
                StringBuffer stb = new StringBuffer(str);
                String rfirst = stb.reverse().toString();
                int irv = Integer.valueOf(rfirst);
                first = first + irv;
                String ft = String.valueOf(first);
                StringBuffer fsb = new StringBuffer(ft);
                String ap = fsb.reverse().toString();
                count++;
                big=first;
                if(first==Integer.valueOf(ap)) break;
            }
            System.out.println(count+ " " + first);
        }
    }
}

2022/02/22 11:55

Kkubuck

def RAA(n):
    count = 0
    while str(n) != str(n)[::-1]:
        n = n + int(str(n)[::-1])
        count += 1
    print(count,n)

2022/06/20 12:16

김시영

n = int(input(">>>"))
i=0
num=[]
while i < n:
    num.append(input(":"))
    i+=1

count=0
for q in num:
    while 1:
        if q == q[::-1]:
            print(count,q)
            break
        q = str(int(q[::-1]) + int(q))
        count += 1
        if count >= 1000 or int(q)> 4294967295:
            print("DATA ERROR")
            break
    count = 0

2022/06/22 20:56

gyachom

while True:
    n = int(input("input the number of the Test Case: "))
    if n > 0 and n <= 100:
        nums = []
        for k in range(n):
            nums.append(input())

        for value in nums:
            count = 0
            while count < 1000 and int(value) <= 4294967295:
                if str(value)[::-1] != str(value):
                    value = int(value) + int(str(value)[::-1])
                    count += 1
                else:
                    print(count, value)
                    break
        break
    else:
        print("You wrote wrong number, you need to write the integer 0 < n <= 100")

2022/06/27 16:23

Charles

한가지 숫자로만 입력받았어요

def rever(a):
    list_ = [char for char in a]
    list_.reverse()
    return ''.join(list_)

def add(a,b):
    return a+b

pal = False
add_val = 0
string = input("input number:")

while pal == False:
    pal = True
    add_val = add(int(rever(string)),int(string))
    print(add_val)
    add_str = str(add_val)
    len_add = len(add_str)
    for i in range(len_add//2):
        if add_str[i] == add_str[-(1+i)]:
            pass
        else:
            pal = False
            string = str(add_val)
            break

print("palindrome is dead: %d" %add_val)

2023/02/18 21:52

제작자

def find_palindrome(num):
    for i in range(1000):
        num_str = str(num)
        if num_str == num_str[::-1]:
            print(i, num)
            return
        else:
            num += int(num_str[::-1])
            print(i, num)

find_palindrome(num)

2023/03/26 21:34

관산정

user = int(input(">"))
data = [];r_data = []
while user != 0:
   r_data.append(user % 10)
   user //= 10
data = r_data[::-1]

num = int(''.join(str(j) for j in data))
r_num = int(''.join(str(k) for k in r_data))

for l in range(1000):
   if num != r_num:
      num += r_num
      data.clear();r_data.clear()
      while num != 0:
         data.append(num % 10)
         num //= 10
      r_data = data[::-1]
      num = int(''.join(str(m) for m in data))
      r_num = int(''.join(str(n) for n in r_data))
   else:
      print(i,'',num)
      exit()

2023/09/07 17:06

siu yoon

def isPalindrome(num):
    su = str(num)
    l, r = 0, len(su)-1
    while l<r:
        if su[l] != su[r]:
            return False
        l, r = l+1, r-1
    return True

def findP(su):
    cnt=0
    while cnt <= 1000:
        if isPalindrome(su):
            return str(cnt) + " " + str(su)
        su += int(str(su)[::-1])
        cnt += 1
    return '1,000번 미만에서 회문을 찾을 수 없음'


inp = """4
195
265
750
196"""

inp_split = inp.split('\n')
for n in range(int(inp_split[0])):
    print(findP(int(inp_split[n+1])))

2024/01/04 13:08

insperChoi

JAVA입니다.

package question4.reverse_and_add;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] outputs = new String[sc.nextInt()];

        for (int i = 0; i < outputs.length; i++) {
            outputs[i] = getPalindrome(sc.nextLong());
        }

        sc.close();

        for (String line : outputs) {
            System.out.println(line);
        }
    }

    static String getPalindrome(long input) {
        StringBuffer sb = new StringBuffer(Long.toString(input));
        int count = 0;

        while(true) {
            count++;

            long current = Long.parseLong(sb.toString());
            sb.reverse();
            long reverse = Long.parseLong(sb.toString());

            if(current == reverse) {
                return count + " " + current;
            }

            long next = current + reverse;
            sb = new StringBuffer(Long.toString(next));
        }
    }
}

2025/02/23 21:51

박준우

목록으로