問題描述
若乙個數(首位不為零)從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。
例如:給定乙個10進製數56,將56加65(即把56從右向左讀),得到121是乙個回文數。
又如:對於10進製數87:
step1:87+78 = 165 step2:165+561 = 726
step3:726+627 = 1353 step4:1353+3531 = 4884
在這裡的一步是指進行了一次n進製的加法,上例最少用了4步得到回文數4884。
寫乙個程式,給定乙個n(2<=n<=10或n=16)進製數m(其中16進製制數字為0-9與a-f),求最少經過幾步可以得到回文數。
如果在30步以內(包含30步)不可能得到回文數,則輸出「impossible!」
輸入格式
兩行,n與m
輸出格式
如果能在30步以內得到回文數,輸出「step=xx」(不含引號),其中xx是步數;否則輸出一行」impossible!」(不含引號)
樣例輸入987
樣例輸出
step=6
解析:回文數我們應該都可以懂是什麼意思。理一下解題思路:判斷是不是回文數->如果是,輸出第一步;如果不是,按照題目要求進行加法,同時記錄步數->每做一步,進行一次判斷看是不是回文數,直到找到或者不可能為止。
理清了思路之後,我們就比較好寫**了:
#include#includeusing namespace std;
char a[100];
int b[100]=;
int result[102]=;
int sum = 0;
void trans_num(char judge)//將字元型轉化成數字型
}void add(int judge,int n)//實行加法運算 ,n表示n進製
if(result[sum]!=0)//產生進製 }
void trans_result_to_b(int judge)//將add結果放入到b陣列中
}bool ispalindrome(int judge)
else
}if(flag==0) return false;
else return true;
} int main()
else
} if(flag==1)
cout<<"step="<
最初的時候,進行進製轉化時,我沒有考慮到十六進製制字母的轉化,所以沒有一次過,看來思維嚴密性還是有待提高。加油!
藍橋 ALGO 14 回文數
acm模版 模擬題,直接模擬這個過程不斷判定即可。需要注意的是最後位數可能比較大,因為每一次相加都可以粗略看做 2 而最多三十步,最後資料的大小可能超乎你的想象。一開始我陣列只開了幾十,wa 了一組資料,然後開到了 100 ac 了 include include using namespace s...
藍橋杯 ALGO 14 演算法訓練 回文數
問題描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 step2 165 561 726 step3 726 627 13...
LeetCode打卡14 回文數
leetcod 打卡14 回文數看一下今天的題目 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例...