#22604: C/C++ & Python 解題概念


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a528. 大數排序 | From: [123.194.188.217] | 發表日期 : 2020-09-19 01:36

這題難度比 a021. 大數運算 簡單很多,如果有在 a021 寫過「小於」的判斷,這題就很好解(但不一定快)

C/C++

這裡列舉兩個方法

1. 將字串讀成數字陣列,再相互比較

我沒把握「C 陣列最小要開多少才能過」,只知道開到 101 可以過;C++ 可以考慮用 std::vector

2. 把兩個字串直接拿來比

以每個位數來說 '0'<'1' 等同於 0<1,直接拿來比就好,又可以省去 char 轉 int 的動作,會快一些

 

排序我是直接用內建的,stdlib.h 的 qsort 和 algorithm 的 sort,都需要自己寫判斷式,
可以參考 http://www.cplusplus.com/reference/cstdlib/qsort/ 和 http://www.cplusplus.com/reference/algorithm/sort/

 

唯比較上要注意一些細節

  • (-) 小於 (+)
  • 相同 (+),數字小的比較小
  • 相同 (-),數字小的比較大
  • 數字大小可以先比位數長度,位數相同再從高位比到低位

Python

使用函式庫 decimal 再加上 sort/sorted,就能迎刃而解
要練習的話,也可以拿上述 C/C++ 的方法來寫看看

 
ZeroJudge Forum