問題描述
若乙個數(首位不為零)從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。
例如:給定乙個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!」(不含引號)
樣例輸入
9
87
樣例輸出
step=6
分析:正常模擬加法即可,注意因為涉及進製超過10,過程不用string而用vector模擬~
#include #include #include int k, cnt = 0;
using namespace std;
vectorf(vectorv)
if (carry > 0) ans.insert(ans.begin(), carry);
return ans;
}bool is(vectorv)
int main()
while (!is(v))
}printf("step=%d\n",cnt);
return 0;
}
演算法訓練 ALGO14 回文數
問題描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 step2 165 561 726 step3 726 627 13...
藍橋 ALGO 14 回文數
acm模版 模擬題,直接模擬這個過程不斷判定即可。需要注意的是最後位數可能比較大,因為每一次相加都可以粗略看做 2 而最多三十步,最後資料的大小可能超乎你的想象。一開始我陣列只開了幾十,wa 了一組資料,然後開到了 100 ac 了 include include using namespace s...
藍橋杯 演算法訓練 ALGO12
問題描述 如果乙個序列滿足下面的性質,我們就將它稱為擺動序列 1.序列中的所有數都是不大於k的正整數 2.序列中至少有兩個數。3.序列中的數兩兩不相等 4.如果第i 1個數比第i 2個數大,則第i個數比第i 2個數小 如果第i 1個數比第i 2個數小,則第i個數比第i 2個數大。比如,當k 3時,有...