輸入輸出樣例
樣例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 ...