zoukankan      html  css  js  c++  java
  • 杭电 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 }
  • 相关阅读:
    HDU 5273 区间DP
    【管理心得之八】通过现象看本质,小王和小张谁更胜任?
    【Unity 3D】学习笔记四十二:粒子特效
    linux kernel的cmdline參数解析原理分析
    adoquery.refresh和adoquery.query的区别
    Delphi中的Sender:TObject对象解析
    ADODataSet与ADOQuery的区别
    visual studio 和 sql server 的激活密钥序列号
    修改VCL源码实现自定义输入对话框
    WINFORM 多条件动态查询 通用代码的设计与实现
  • 原文地址:https://www.cnblogs.com/yizhanhaha/p/3066899.html
Copyright © 2011-2022 走看看