hpuoj--1093: 回文数(一)

1093: 回文数(一)

时间限制: 1 Sec  内存限制: 128 MB
提交: 3  解决: 3
[提交][状态][讨论版]

题目描述

若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如:87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
编写一个程序,输入M(12<=M<=100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。

输入

第1行一个正整数L,代表测试数据的组数。
接下来L行每行一个整数M(12<=M<=100),M本身不为回文数;

输出

输出L行,第i行对应输入数据的第i+1行,输出最少需要的步数;如果步数大于8,则输出0。

样例输入

3
12
87
89

样例输出

1
4
0

提示

 

来源

吉首大学软件学院

略坑: -- > 咱理工大自己的OJ。 Nm.

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int a[10], num, total;
int main()
{
        int t;    
        int n;
        scanf("%d", &t);
        while(t--)
        {
            scanf("%d", &n); 
            int total = 1;
            s1:    int k = 0; 
            int Ac = n;
            while(Ac)
            {
                a[k++] = Ac % 10; 
                Ac /= 10;
            }
            int num = 0;
            for(int i = 0; i < k; i++)
                num = num*10 + a[i];
            if(num == n){
                printf("%d
", total- 1);
                continue;
            }
            else{
                n = num + n;
                ++total;
                if(total > 8){
                    printf("0
");
                    continue;
                } 
                goto s1; 
            }
    }
    return 0;    
}
原文地址:https://www.cnblogs.com/soTired/p/4759446.html