/ C++党 / 题库 /

[noip1999]回文数字

[noip1999]回文数字

时间限制:1s 空间限制:1024KiB


题目来源

本题是1999年普及组的第二题和1999年提高组的第二题(难度:普及),希望你能把它做出来,加油!!!^_^

题目描述

有一天,数学老师告诉同学们,如果一个数(首位不为零)从左向右读与从右向左读都一样,那么就将其称之为回文数,例如121就是一个回文数,但是122不是回文数,因为122从右往左读是数字221。
电光火石之间,小Q灵光一闪,如果我们把一个数从左往右读(→)和这个数从右往左读(←)得到的两个数相加,是不是能在有限的步骤中使得最终结果是一个回文数呢?
小Q把这个想法告诉了老师,老师笑笑说:“这个想法很好,但是有一点不足,这一条规律是否能在任何进制下使用呢?”
小Q把这个问题交给了学习信奥的你,希望你能帮他解答。
例如:对于给定一个十进制数56,将56加65(即把56从右向左读),得到121是一个回文数,此时用了1步。
又比如:对于10进制数87:
STEP1:87+78=165
STEP2:165+561=726
STEP3:726+627=1353
STEP4:1353+3531=4884
在这里的一步是指进行了一次N进制的加法,对于十进制数87,最少用了4步得到回文数4884。
现在请你写一个程序,对于给定一个N(为方便起见,2≤N≤10或N=16)进制数M,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”(引号不用输出)。

输入输出格式

输入格式:

2个整数N,M,表示在N进制下M的数值。

输出格式:

STEP=X,其中X表示最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”(引号不用输出)。

输入输出样例

Input #1

9 87

Output #1

STEP=6

Input #2

10 87

Output #2

STEP=4

时间和空间限制

每个测试点时间1s,空间1024KiB。

数据范围约定

100%的数据保证2≤N≤10或N=16,M在十进制十数的大小在int范围内。

提供者

Vijos 梁忆炎