일단 어떤 수를 받아서 그 수를 뒤집은 다음 뒤집어진 수를 원래의 수에 더하는 과정을 뒤집어서 더하기라고 부르자. 그 합이 회문(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
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)
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
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*/
파이썬으로 한번 짜봤습니다
#
# 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])
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
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])
#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;
}
```[파이썬] 재귀로 짜봤어여
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
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 숫자 찾기랑 비슷한 문제네요
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;
}
}
풀고보니, 맨 윗분과 풀이가 비슷한 것 같네요, 근데 간결하지는 못하군요 ㅠㅠㅋ
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;
}
}
파이썬 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))
#완전 초보인데 일단 올려봅니다 ㅎㅎ
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)
파이썬 입니다. 재귀로 만들었습니다.
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)
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);
}
}
}
회문수가 되는 한계 결과값이 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;
}
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;
}
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]);
}
}
}
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]);
}
}
쉽게쉽게 짜봤습니다.
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")
짜긴짰는데 맘에들진않네요. 속도를 줄일만한 알고리즘이 생각이 안나네영
#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;
}
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
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
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
파이썬입니다.
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]))
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
#파이썬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)))
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
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
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)로 넣어서 합쳤는데, 그럴필요가 없어져 매우 간결해졌습니다.
재귀함수도 이용되었습니다.
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
왕초보가 만든 자바풀이(믿거나 말거나#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)가 중복될 수도 있음. 중복되지 않게 하는 방법을 몰라서 코드 작성하지 못함.(출력값에 영향을 미치지 않아서 작성하지 않은 이유도 있음)
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에서 작성하였습니다.
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);
}
}
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])
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;
}
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; }
#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"))
#파이썬은 사랑입니다
#파이썬 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"))
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 ####
#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;
}
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]);
}
}
}
#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;
}
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);
}
}
}
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
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)
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
'''
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);
파이썬 초보자 입니다.
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
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();
}
}
}
}
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)
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=" ")
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))
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;
}
}
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
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)
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))
파이썬 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
# 파이썬
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])
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)
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))
파이썬으로 재귀함수를 이용해 작성했습니다.
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)
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}
```
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이 입력후 기능을 하지 않네요..
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)
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)))
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();
}
}
// 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)))
}
}
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}
자바입니다
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}
자바입니다
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}
자바입니다
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}
자바입니다
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);
}
}
자바입니다. 코드 삽입 진짜 더럽게 되네요.
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)
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());
}
}
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)
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);
}
}
#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;
}
# 처음 입력 받은 수만큼 입력
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) # 결과 출력
파이썬 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
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]))
// 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;
}
}
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}";
}
}
}
^^
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;
}
}
#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]]
'''
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)
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)
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
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);
}
}
# 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
파이썬 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)
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
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])
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)
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])
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)
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] 을 알게 되었읍니다. 오랜만에 보니 반갑군요.^^
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)
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를 제어하는 부분은 넣지 못했어요.
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' 이게 왜 에러가 날까요.. 다른 부분은 잘 되는데..
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)))
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)
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))
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++;
}
}
}
}
}
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]);
}
}
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);
}
}
}
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
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))
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)
#파이썬
#이정도 까지는 안해도 될것 같은데,
#제가 좀 어렵게 푼것 같네요...ㅜㅜ
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)
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()
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()
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번 이상 실행되지 않는다는걸 알게되었네요 ^^;;;
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)
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)
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)
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
파이썬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)
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")
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();
}
}
}
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
파이썬 입니다~
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)
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)
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()
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
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
파이썬은 자료 만지기 편하네요 너무좋아
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("회문을 알 숫자를 대입하세요 : "))
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
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))
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)
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)
#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
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)
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
#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)
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])
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))
// 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::
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])
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);
}
}
}
def RAA(n):
count = 0
while str(n) != str(n)[::-1]:
n = n + int(str(n)[::-1])
count += 1
print(count,n)
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
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")
한가지 숫자로만 입력받았어요
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)
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)
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()
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])))
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));
}
}
}