Easy_03

作者: 逃避虽可耻 | 来源:发表于2020-02-12 14:43 被阅读0次
题目

思路:根据题目描述,负数肯定不是回文数,0肯定是回文数。

对于正整数:

(1)利用字符串

bool isPalindrome(int x) {

    ostringstream stream;

    stream<<x;

    string num = stream.str();

    int j = num.size() - 1;

    for(int i = 0; i < num.size();++i){

        if (num[i] != num[j])

            return false;

        --j;

    }

    return true;

    }

结果

代码相对较短,但结果依然不理想。

(2)利用余数

bool isPalindrome(int x) {

//负数肯定不是回文

if (x < 0) return false;

if (x == 0) return true;

int temp_x = x;

int remainder = 0;

vector<int> remainders;

while(x != 0){

remainder = x % 10;

remainders.push_back(remainder);

x = x/ 10;

}

int num_size = pow(10,remainders.size() - 1);

int i = 0;

while(temp_x != 0){

int r = temp_x / num_size;

if (remainders[i] != r) return false;

++i;

temp_x = temp_x % num_size;

num_size /= 10;

}

return true;

    }

结果

可以看到,虽然通过的测试用例,但是结果并不好。

缺点:两次取余的计算。向量的额外引用。

优化空间:回文关于中心对称,所以在获得%10的余数之后不必在计算另外一个从做高位取得的余数。只要利用该数组的头和尾逐一比较即可。


收获:

C++ 98 将int类型转换为string类型的用法

#include<sstream>

ostringstream stream;

stream<<num;

string num_ = stream.str();

C++11 可以直接使用to_string()转换为string

相关文章

  • Easy_03

    思路:根据题目描述,负数肯定不是回文数,0肯定是回文数。 对于正整数: (1)利用字符串 boolisPalind...

网友评论

      本文标题:Easy_03

      本文链接:https://www.haomeiwen.com/subject/jkfcfhtx.html