• 1107 回文数猜想


    题目来源:
    https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1107
    Description
    一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。现在请你编程序验证之。你已经会写求一个整数的逆序数的函数inverse(),那么如下循环可以模拟回文数猜想的验证过程:

    while( m = inverse(n), m != n)
    {
    输出n;
    把n更新为 m + n;
    }
    Input
    输入一个正整数。特别说明:输入的数据保证中间结果小于2^31。
    Output
    输出占一行,变换的过程中得到的数值,两个数之间用空格隔开。
    Sample Input
    27228

    Sample Output
    27228 109500 115401 219912
    题意描述:
    输入一个正整数n(n<2`31)
    计算并输出该数经过的变换变成回文数的过程
    解题思路:
    将n的逆序数赋值给m,while循环当m!=n的时候输出n并更新n为n+m,知道m=n时输出n即可
    程序代码:

     1 #include<stdio.h>
     2 int inverse(int n);
     3 int main()
     4 {
     5     int n,m,t;
     6     while(scanf("%d",&n)!= EOF)
     7     {
     8         t=n;
     9         while(m=inverse(n),m!=n)
    10         {
    11             if(t==n)
    12             printf("%d",n);
    13             else
    14             printf(" %d",n);
    15             
    16             n += m;
    17         }
    18         if(t==n)
    19         printf("%d
    ",n);
    20         else
    21         printf(" %d
    ",n);
    22     }
    23     return 0;
    24 }
    25 int inverse(int n)
    26 {
    27     int i,sum=0;
    28     while(n)
    29     {
    30         sum=sum*10+n%10;
    31         n /= 10;
    32     }
    33     return sum;
    34 }


    错误分析:
    千万注意while(scanf("%d",&n)!= EOF)不是n!= EOF
    还有注意有的题吃空格

  • 相关阅读:
    MacBook设置终端颜色,补全忽略大小写,设置命令别名alias,设置vim,设置显示git分支
    lvs
    java lock锁住特定对象
    java实现版本比较
    mysql根据时间查询日期的优化
    DIV固定宽度和动态拉伸混合水平排列
    js控制input text字符键入/字符长度限制/字母自动大写
    CSS实现响应式布局(自动拆分几列)
    重命名流程
    div按照屏幕尺寸(设备大小)进行缩放
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/6925281.html
Copyright © 2020-2023  润新知