• 杭电 1282 回文数猜想


    回文数猜想

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 3022    Accepted Submission(s): 1825


    Problem Description
    一 个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒 序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成 1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到 一个回文数。至今为止还不知道这个猜想是对还是错。现在请你编程序验证之。
     
    Input
    每行一个正整数。
    特别说明:输入的数据保证中间结果小于2^31。
     
    Output
    对应每个输入,输出两行,一行是变换的次数,一行是变换的过程。
     
    Sample Input
    27228 37649
     
    Sample Output
    3 27228--->109500--->115401--->219912 2 37649--->132322--->355553
     
    Author
    SmallBeer(CML)
     
    Source
     
    Recommend
    lcy
     
        从该题中学到两个函数,itoa与sprintf,这两个都是数字转换成字符串的函数
     
    View Code
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int ispalindromic(int a)
     6 {
     7     char s[15];
     8     int len, i;
     9     sprintf(s,"%d", a);
    10     len = strlen(s);
    11     for( i = 0; i < len/2; i++ )
    12          if( s[i] != s[len-1-i] )
    13              return 0;
    14     return 1;
    15     
    16 }
    17 
    18 int reverse( int a )
    19 {
    20     char s[15];
    21     int len, k = 0, i;
    22     sprintf(s,"%d",a);
    23     len = strlen(s);
    24     for( i = len-1; i >= 0; i-- )
    25          k = k * 10 + s[i] - '0';
    26     return k;
    27 }
    28 
    29 int main(int argc, char *argv[])
    30 {
    31     int a, b[1000], cnt ,c, i;
    32     while( scanf( "%d", &a ) != EOF )
    33     {
    34            cnt = 0;
    35            memset(b,0,1000*sizeof(int));
    36            b[cnt++] = a;
    37            while( !ispalindromic(a) )
    38            {
    39                   c = reverse(a);
    40                   b[cnt++] = a + c;
    41                   a = a + c;
    42            }
    43            printf( "%d\n%d", cnt-1,b[0] );
    44            for( i = 1; i < cnt; i++ )
    45                     printf("--->%d", b[i]);
    46            printf( "\n" );  
    47     }
    48   
    49  // system("PAUSE");    
    50   return 0;
    51 }
  • 相关阅读:
    [图解算法] 最短路径算法之 “Dijikstra”
    [前端随笔][CSS] 伪类的应用
    [前端随笔][JavaScript] 实现原生的事件监听<Vue原理>
    [图解算法] 最短路径算法之 “Floyd”
    [前端随笔][JavaScript][自制数据可视化] “中国地图”
    [前端随笔][JavaScript] 懒加载的实现(上划一次加载一部分)
    [前端随笔][CSS] 制作一个加载动画 即帖即用
    ThinkPHP下隐藏index.php以及URL伪静态
    PHP基础语法3
    PHP基础语法2
  • 原文地址:https://www.cnblogs.com/yizhanhaha/p/3066899.html
Copyright © 2020-2023  润新知