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 }
  • 相关阅读:
    C++ set简介及简单应用
    windows下安装scrapy报错:building 'twisted.test.raiser' extension error: Microsoft Visual C++ 14.0 is required.
    jsp调用Python脚本存取文件
    mysql触发器问题
    javascript调用alert()
    jsp调用Python
    注意细节,注意细节,注意细节
    pandas读取csv文件报错
    [kuangbin带你飞]专题四 最短路练习
    计算机网络之网络应用(应用层)上
  • 原文地址:https://www.cnblogs.com/wixy/p/5492909.html
Copyright © 2011-2022 走看看