#29678: C 解題思考


pds3601o (findStenFaul)

學校 : 不指定學校
編號 : 185702
來源 : [67.165.112.98]
最後登入時間 :
2022-09-03 12:17:08
a040. 阿姆斯壯數 | From: [223.140.109.111] | 發表日期 : 2022-03-20 20:58

分為三個部分 1. 窮舉輸入的min ~ max之間所有數字 2. 找出幾位數並計算 3.縮短執行時間

窮舉 for (int i=min; i <= max; i++) {}

找出幾位數: while i >0 ( i /=10, len++) ,len 為幾位數

計算時,縮短執行時間,加起來已經大於i則跳出迴圈

while ( armNum <= i &&  i>0 ) { armNUM += (i%10) ^ len;  i /= 10; }

最後只判斷 armNUM == i 順便用個count如果找到就count++。

 

count = 0 就none

 

(上面只是概念,請記得找個值暫存i,因為i要拿來判斷值不能變...)

 
#30980: Re: C 解題思考


d2513850 (林勇智)

學校 : 崑山科技大學
編號 : 5102
來源 : [27.53.131.137]
最後登入時間 :
2024-11-17 10:12:31
a040. 阿姆斯壯數 | From: [118.231.145.152] | 發表日期 : 2022-06-28 07:26

分為三個部分 1. 窮舉輸入的min ~ max之間所有數字 2. 找出幾位數並計算 3.縮短執行時間

窮舉 for (int i=min; i <= max; i++) {}

找出幾位數: while i >0 ( i /=10, len++) ,len 為幾位數

計算時,縮短執行時間,加起來已經大於i則跳出迴圈

while ( armNum <= i &&  i>0 ) { armNUM += (i%10) ^ len;  i /= 10; }

最後只判斷 armNUM == i 順便用個count如果找到就count++。

 

count = 0 就none

 

(上面只是概念,請記得找個值暫存i,因為i要拿來判斷值不能變...)

這裡有可以參考的程式碼:
https://youtube.com/shorts/g2-dkQsPBtQ?feature=share

 
ZeroJudge Forum