高精度回文數

2021-10-17 12:24:28 字數 1963 閱讀 9297

輸入輸出樣例

樣例2題目分析

**若乙個數(首位不為零)從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。

例如:給定乙個十進位制數 56,將 56加 65(即把 56 從右向左讀),得到 121是乙個回文數。

又如:對於十進位制數 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(100 位之內),求最少經過幾步可以得到回文數。如果在 30 步以內(包含 30 步)不可能得到回文數,則輸出 impossible!。

兩行,分別是 n,m。

如果能在 30 步以內得到回文數,輸出格式形如 step=ans,其中 ans 為最少得到回文數的步數。否則輸出 impossible!。

輸入

10

87

輸出
step=

4

輸入
16

ac27

輸出
step=

6

本題**於**於noip1999 普及組,題目中已經提示了進行了一次 n 進製的加法,因此我們要進行高精度加法運算。

在這一題中,我們將要用到高精度加,高精度翻轉字串,高精度判斷回文數(函式judge)。在高精度加的運算中,我的基本思路是將每一位轉換為十進位制,進行十進位制整型陣列的按位加法,記錄進製,最後再轉換為字元陣列。1

#include

#include

#define n 105

//可根據題目要求改變

char res[n]

;char

*re_add

(int n,

char

*s);

intjudge

(char

*s);

intmain

(void

) p=

re_add

(n,p);}

printf

("impossible!");

return0;

}char

*re_add

(int n,

char

*str1)

,s2[n]

=,result[n]=;

len=

(strlen

(str1)

>

strlen

(str2))?

strlen

(str1)

:strlen

(str2)

;//將字串轉換為數字進行高精度加法

for(

int i=

strlen

(str1)-1

,j=0

;i>=

0;i--

,j++

)for

(int i=

strlen

(str2)-1

,j=0

;i>=

0;i--

,j++

)for

(int i=

0;i<=len+

1;i++

)else ans=0;

}//將整型陣列result轉換為字元陣列res

for(

int i=len+

1;i>=

0;i--

)return res;

}int

judge

(char

*s)

本蒟蒻第一次寫部落格,在博文格式和**風格上還很不成熟,希望各位julao多多理解和指導。 ↩︎

高精度除法(高精度除以高精度)

先貼乙個簡單的高精度除以單精度的 include include include using namespace std int main else ys ys 10 a i 0 while c i 0 i for int j i j 0 j printf d c j if ys printf d ...

刪數遊戲 高精度

思想分析 法2 棧法 推薦 時間限制 1 sec 記憶體限制 128 mb 給出乙個n位數字串,刪除任意k位,使剩下的數最大。第1行 2個整數n和k 1 k n 500000 第2行 n個數字 可能為0 第1行 1個可行到的最大的數 10 4 4177252841 沒有看過非高精度刪數遊戲的童鞋,戳...

高精度除高精度

演算法流程 第一步,讀入被除數 a 和 除數 b,判斷是否 a b,是則輸出 0 並結束演算法,否則令 answer 0 第二步,令餘數 remainder 0,令 i 從被除數最高位的下標開始 第三步,令 remainder remainder 10 a i 令 c 9 第四步,判斷是否 b c ...