專練六 高精度運算典例

2021-09-26 09:19:07 字數 1902 閱讀 1101

【問題描述】

若乙個數(首位不為零)從左向右讀與從右向左讀都是一樣,我們就將其稱之為回文數。例如:給定乙個 10進製數 56,將 56加 65(即把56從右向左讀),得到 121是乙個回文數。又如,對於10進製數87,

stepl: 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.求最少經過幾步可以得到回文數。如果在30步以內(包含30步)不可能得到回文數,則輸出「impossible」

【輸入樣例】:9 87

【輸出樣例】:6

【分析】

n進製運算

1、當前位規範由%10改為% n

2、進製處理由/10改為/n

3、其他運算規則不變

【題解】

std:

#include

#include

using namespace std;

int n,a[

101]

,b[101

],ans,i;

void

init

(int a)

//將數串s轉化為整數陣列a

bool check

(int a)

//判別整數陣列a是否為回文數

void

jia(

int a)

//整數陣列a與其反序數b進行n進製加法運算

if(a[a[0]

+1]>

0) a[0]

++;//修正新的a的位數(a+b最多只能的乙個進製)

}int

main()

ans=0;

//步數初始化為0

while

(ans++

<=30)

} cout<<

"impossible"

;//輸出無解資訊

return0;

}

【問題描述】

給定a、b、c三根足夠長的細柱,在a柱上放有2n個中間有孔的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的(下圖為n=3的情形)。現要將這些圓盤移到c柱上,在移動過程中可放在b柱上暫存。要求:

(1)每次只能移動乙個圓盤;

(2)a、b、c三根細柱上的圓盤都要保持上小下大的順序;

任務:設an為2n個圓盤完成上述任務所需的最少移動次數,對於輸入的n,輸出an。

【輸入格式】

輸入檔案hanoi.in為乙個正整數n,表示在a柱上放有2n個圓盤。

【輸出格式】

輸出檔案hanoi.out僅一行,包含乙個正整數, 為完成上述任務所需的最少移動次數an。

樣例一hanoi.in hanoi.out

1 2樣例二

hanoi.in hanoi.out

2 6【限制】

對於50%的資料,1<=n<=25

對於100%的資料,1<=n<=200

【提示】設法建立an與an-1的遞推關係式。

【題解】

std:

#include

#include

#include

#include

using namespace std;

int f[

300]

,n;void

qaq()if

(f[f[0]

+1]!=

0) f[0]

++;}int

main()

高精度運算

今天覆習了一下高精度運算。我覺得這種簡單的東西也得看一看,至少給自己留點兒低!高精度可以壓位的,但我今年懶得寫了 首先是加減法很簡單了,沒什麼值得特別強調的。高精度減法時別忘了,a時做下交換在計算,輸出時別忘了標記負號。高精度乘法需要注意的問題是,要在做完乘法之後再調整為十進位制。有的初學者小盆友喜...

高精度運算

雖說高精度直接考查的越來越少,不過還是以防萬一。define maxlen 1000 struct bint 本模板既可輸入字串,也可輸入整數 bint int t if len 1 len bint char str print number friend void print bint bi p...

高精度運算

name 高精度運算 author goal00001111 date 01 12 08 15 04 description 高精度運算 加減乘除,乘方,階乘 include include using namespace std void reverse string str void addin...