zoukankan      html  css  js  c++  java
  • 合工大OJ 1331 回文数

    Description

    一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。

    任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。

    例如:

    68变成15468+86),再变成605154+451),最后变成1111605+506),而1111是回文数。

    于是有数学家提出一个猜想:

    不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。

    现在请你编程序验证之。

    Input

    每行一个正整数。

     

    Output

    对应每个输入,输出一行为变换的过程。

     

    Sample Input

    27228
    37649

    Sample Output

    27228--->109500--->115401--->219912
    37649--->132322--->355553

    Hint

    1.输入的数据保证小于2^60
    2.每组数据保证最多运算100次
    友情提示:WA的同学请仔细阅读提示1和提示2
     
     
    简单题解:看到提示,就直接用字符串处理大数加法,直接AC
     
     
     
     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 
     5 bool ishuiwen(string s)
     6 {
     7     for(int i=0;i<s.length()/2;i++)
     8     {
     9         if(s[i]!=s[s.length()-1-i])
    10             return 0;
    11     }
    12     return 1;
    13 }
    14 
    15 string Add(string s)
    16 {
    17     string sum,x;
    18     for(int i=0;i<s.length();i++)
    19         x[i]=s[s.length()-i-1];
    20     int len=s.length();
    21     int *a=new int[len+1];
    22     a[0]=0;
    23     int d=0;
    24     for(int i=s.length();i>=1;i--)//从最低位开始计算两个数各位的和,保存到结果数组 
    25         a[i]=s[i-1]+x[i-1]-'0'-'0';//a[1]为计算后结果的最高位,进位情况还未处理 
    26     for(int i=s.length();i>=0;i--)//处理进位情况 
    27     {
    28         a[i]+=d;//本位加上上一位的进位 
    29         if(a[i]>=10)//当该位大于等于10时,只保留该位的个位 ,向下一位的进位d为十位 
    30         {
    31             d=a[i]/10;
    32             a[i]%=10;
    33         }
    34         else if(a[i]<10)//当该位小于10是,向高位的进位为0 
    35             d=0;
    36     }
    37     if(a[0]>0)
    38         for(int i=0;i<s.length()+1;i++)
    39             sum+=a[i]+'0';
    40     else
    41         for(int i=0;i<s.length();i++)
    42             sum+=a[i+1]+'0';
    43     return sum;
    44 }
    45 
    46 int main()
    47 {
    48     string s;
    49     while(cin>>s)
    50     {
    51         cout<<s;
    52         while(!ishuiwen(s))
    53         {
    54             s=Add(s);
    55             cout<<"--->"<<s;
    56         }
    57         cout<<endl;
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    Codeforces Round #649 (Div. 2) D. Ehab's Last Corollary
    Educational Codeforces Round 89 (Rated for Div. 2) E. Two Arrays
    Educational Codeforces Round 89 (Rated for Div. 2) D. Two Divisors
    Codeforces Round #647 (Div. 2) E. Johnny and Grandmaster
    Codeforces Round #647 (Div. 2) F. Johnny and Megan's Necklace
    Codeforces Round #648 (Div. 2) G. Secure Password
    Codeforces Round #646 (Div. 2) F. Rotating Substrings
    C++STL常见用法
    各类学习慕课(不定期更新
    高阶等差数列
  • 原文地址:https://www.cnblogs.com/wixy/p/5492909.html
Copyright © 2011-2022 走看看