hdu_1282 回文数猜想

(最近水题刷的比较多,不过还是有些收获,所以还是做个记录比较好)

http://acm.hdu.edu.cn/showproblem.php?pid=1282

分析:

题目理解起来还是简单的,基本上有两种思路:1) 将int转为string来实现; 2)直接用int做(回文串判断,相加)

第二中思路比较直接,将一个数倒置得到新的数,然后判断是否是回文数(两个数值相等);不过鄙人采用了第一种方法,因为字符串的操作不太熟练,需要联系来着。

字符串操作:

string -->  int

int a;

string str="123";

a=atoi(str.c_str());   //头文件 stdlib.h

int  -->  string

int   a;

string   str;

stringstream ss;        //头文件  sstream.h

ss<<a;

ss>>str;

字符串转置

string str="123";

reverse( str.begin(), str.end() );          //  algorithm.h

cout<<str<<endl;                                 //输出321

代码:

//hdu 1282
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <sstream>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define MAXN 10000

int cnt;
string s[MAXN];

bool palindrome(string e)
{
    for(int i=0,j=e.length()-1;i<e.length();i++,j--){
        if(e[i]!=e[j]) return false;
    }
    return true;
}

void show()
{
    cout<<cnt-1<<endl;
    for(int i=0;i<cnt-1;i++)
        cout<<s[i]<<"--->";
    cout<<s[cnt-1]<<endl;
}

void deal(string e)
{
    int a;
    string x=e;
    while(1){
        s[cnt++]=x;
        a=atoi(x.c_str());
        reverse(x.begin(),x.end());
        a +=atoi(x.c_str());  //123+321
        stringstream ss;
        ss<<a; ss>>x;
        if(palindrome(x)) {
           s[cnt++]=x;
            break;
        }
    }
    show();
}

int main()
{
    freopen("in.txt","r",stdin);
    string str;
    while(cin>>str){
        if(palindrome(str)){
            cout<<0<<endl<<str<<endl;
            continue;
        }
        cnt=0;
        deal(str);
    }
    return 0;
}

hdu_1282 回文数猜想

时间: 2024-09-28 21:19:54

hdu_1282 回文数猜想的相关文章

回文数猜想(hd1282)

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

1107 回文数猜想

题目来源:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1107Description一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止.例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数.于是有数学家提出一个猜想:

杭电 HDU ACM 1282 回文数猜想

回文数猜想 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4940    Accepted Submission(s): 2958 Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不

Problem1282 回文数猜想

回文数猜想 http://acm.hdu.edu.cn/showproblem.php?pid=1282 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8798    Accepted Submission(s): 5345 Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是

1107: 回文数猜想(函数专题)

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

hdu1282回文数猜想

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

HDU 1282 回文数猜想(简单数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1282 Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止.例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数.于是有数学家提出一个

(HDU)1282 -- 回文数猜想

题目链接:http://vjudge.net/problem/HDU-1282 做这个题目的时候想了很多. 第一,怎么判断一个数是不是回文数(可以用int表示的时候): 最初的想法是用字符串处理,int(log10()+1)来得到位数...(服了自己)... 然后从两段向中间对比,全部满足就是回文数,后来觉得好麻烦啊. 后来写了个函数得出一个数的反过来的数字,要用的时候用个if语句判断. 第二,格式问题... 反正做这题的时候脑子有点懵,状态很一般,打不过水题. 1 #include <cstd

回文数猜想

....理工上用了 long long 才过 ..... 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 #include<vector> 8 #include<set> 9 #include<stack>