HDU 1282 回文数猜想

比眉伴天荒 2024-02-17 19:44 114阅读 0赞

一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。现在请你编程序验证之。

Input

每行一个正整数。
特别说明:输入的数据保证中间结果小于2^31。

Output

对应每个输入,输出两行,一行是变换的次数,一行是变换的过程。

Sample Input

  1. 27228
  2. 37649

Sample Output

  1. 3
  2. 27228--->109500--->115401--->219912
  3. 2
  4. 37649--->132322--->355553

题挺简单的,一步步往下写就行了。

AC代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. const int maxn=1e4+10;
  5. int a[maxn];
  6. bool check(int n){ //检查是否为回文
  7. int tmp=n;
  8. int tol=0;
  9. int b[12];
  10. while(tmp){
  11. b[tol++]=tmp%10;
  12. tmp/=10;
  13. }
  14. for(int i=0;i<=tol/2;i++){
  15. if(b[i]!=b[tol-i-1])return false ;
  16. }
  17. return true;
  18. }
  19. int main(){
  20. int n;
  21. while(scanf("%d",&n)==1){
  22. memset(a,0,sizeof(a));
  23. int tol=0;
  24. a[0]=n;
  25. while(!check(n)){
  26. tol++;
  27. int sum=0;
  28. int cnt=n;
  29. while(cnt){
  30. sum=sum*10+cnt%10;
  31. cnt/=10;
  32. }
  33. n+=sum;
  34. a[tol]=n;
  35. }
  36. printf("%d\n",tol);
  37. for(int i=0;i<tol;i++)
  38. printf("%d--->",a[i]);
  39. printf("%d\n",a[tol]);
  40. }
  41. return 0;
  42. }

发表评论

表情:
评论列表 (有 0 条评论,114人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HDU 1282 猜想

    一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则

    相关 猜想(函数专题)

    题目描述 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和

    相关 猜想

    回文猜想数 一个正整数,如果从左到右读和从右向左读是一样的,这样的数就叫做回文数 任取一个正整数,若其不是回文数,则将该数与其倒序数相加,若其和不

    相关 猜想(函数专题)

    题目: 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是