ZOJ 1078 解题报告

ZOJ 1078 解题报告
非常简单的题,没什么好说的.唯一值得一提的就是在判断是否是回文的时候只需遍历一半的元素即可,稍微提高一点性能.
Code
 1#include <vector>
 2#include <iostream>
 3using namespace std;
 4
 5const int BASE = 16;
 6
 7bool isPalindrom(int num, int base)
 8{
 9    vector<int> v;
10    while(num)
11    {
12        v.push_back(num % base);
13        num /= base;
14    }

15
16    int start, end;
17    for(start = 0, end = v.size() - 1; start < (end + 1/ 2++start, --end)
18    {
19        if(v[start] != v[end])
20            return false;
21    }

22    return true;
23}

24
25int _tmain(int argc, _TCHAR* argv[])
26{
27    int n;
28    vector<int> result;
29    while(cin >> n && n != 0)
30    {
31        result.clear();
32        for(int i = 2; i <= BASE; ++i)
33        {
34            if(isPalindrom(n, i))
35                result.push_back(i);
36        }

37
38        int length = result.size();
39        if(length == 0)
40        {
41            cout << "Number " << n << " is not a palindrom" << endl;
42        }

43        
44        else
45        {
46            cout << "Number " << n << " is palindrom in basis ";
47            for(int i = 0; i < length - 1++i)
48            {
49                cout << result[i] << " ";
50            }

51            cout << result[length - 1<< endl;
52        }

53    }

54    return 0;
55}

56
57

你可能感兴趣的:(ZOJ 1078 解题报告)