C++ Zoj1078 Palindrom Numbers(迴文數)
阿新 • • 發佈:2019-01-07
題目大意:判斷一個十進位制數i轉化為2-16進位制的數是否是迴文數,如果是輸出: Number I is is palindrom in basis X X X
否則輸出:Number 19 is not a palindrom
迴文數:一個數中的數字左右對稱
輸入:
每行輸入測試資料i,以0結束程式
輸出:
輸出對應的i是否是迴文數
實現程式: 我這裡用了string儲存轉成的進位制數,因為string儲存空間可以隨意改變,隨意新增字元。你也可以用陣列儲存,需要
新增一個跟蹤位數的j,缺點:陣列固定空間,如果測試資料小,會浪費空間。
#include <iostream> #include <string> using namespace std; int main() { int n; string str; while (cin >> n && n) { int flag = 0; cout << "Number " << n << " is "; for (int i = 2; i <= 16; i++) { int m = n; // 將n轉成2-16進位制數,存到字串str中 str.clear(); while (m) { str += (m % i); m = m / i; } // 判斷轉成的進位制數是否是迴文數(數字左右對稱) int j; int len = (int)str.size(); for (j = 0; j < ( len / 2); j++) { if (str[j] != str[len - 1 - j]) break; } if (j == len / 2) { // 是迴文數 if (!flag) { // 輸出第一次滿足迴文數的進位制數 flag = 1; cout << "palindrom in basis " << i; } else cout << " " << i; } } if (!flag) cout << "not a palindrom"; cout << endl; } return 0; }
執行結果: