File tree Expand file tree Collapse file tree
Algorithm/Other/leetcode/7. Reverse Integer
DataStructures/Trees/BinaryIndexedTree/FenwickTree/atcoder/A76 Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ この解法は、64ビット整数を使わずに、32ビット整数の範囲を超えないかを都度チェックしながら桁を逆にしていきます。
2+
3+ ---
4+
5+ ### ✅ TypeScriptコード(` fs ` での入力読み取り対応)
6+
7+ ``` ts
8+ import * as fs from ' fs' ;
9+
10+ const input = fs .readFileSync (' /dev/stdin' , ' utf8' ).trim ();
11+ const x = parseInt (input );
12+
13+ /**
14+ * 32ビット整数の範囲
15+ */
16+ const INT_MIN = - (2 ** 31 );
17+ const INT_MAX = 2 ** 31 - 1 ;
18+
19+ function reverse(x : number ): number {
20+ let result = 0 ;
21+ let num = x ;
22+
23+ while (num !== 0 ) {
24+ const digit = num % 10 | 0 ; // 小数点対策で |0 して整数化
25+ num = (num / 10 ) | 0 ;
26+
27+ // resultが次の桁を追加したときにオーバーフローしないか確認
28+ if (
29+ result > Math .floor (INT_MAX / 10 ) ||
30+ (result === Math .floor (INT_MAX / 10 ) && digit > 7 )
31+ ) {
32+ return 0 ;
33+ }
34+ if (
35+ result < Math .ceil (INT_MIN / 10 ) ||
36+ (result === Math .ceil (INT_MIN / 10 ) && digit < - 8 )
37+ ) {
38+ return 0 ;
39+ }
40+
41+ result = result * 10 + digit ;
42+ }
43+
44+ return result ;
45+ }
46+
47+ console .log (reverse (x ));
48+ ```
49+
50+ ---
51+
52+ ### 🔍 処理概要(図付きで説明)
53+
54+ たとえば ` x = -123 ` のとき:
55+
56+ ```
57+ 初期状態: result = 0, num = -123
58+
59+ ループ1:
60+ digit = -123 % 10 = -3
61+ num = -123 / 10 = -12
62+ result = 0 * 10 + (-3) = -3
63+
64+ ループ2:
65+ digit = -12 % 10 = -2
66+ num = -12 / 10 = -1
67+ result = -3 * 10 + (-2) = -32
68+
69+ ループ3:
70+ digit = -1 % 10 = -1
71+ num = -1 / 10 = 0
72+ result = -32 * 10 + (-1) = -321
73+
74+ 終了(num === 0)→ return -321
75+ ```
76+
77+ ---
78+
79+ ### 🛑 オーバーフローの例
80+
81+ 例:` x = 1534236469 `
82+
83+ ```
84+ 途中で result = 964632435 になり、
85+ 次の桁(9)を追加すると 9646324350 + 9 = 9646324359 > INT_MAX
86+ → return 0
87+ ```
88+
89+ ---
90+
91+ ### ✅ テストケース例
92+
93+ ``` plaintext
94+ Input:
95+ 123
96+ Output:
97+ 321
98+
99+ Input:
100+ -123
101+ Output:
102+ -321
103+
104+ Input:
105+ 120
106+ Output:
107+ 21
108+
109+ Input:
110+ 1534236469
111+ Output:
112+ 0
113+ ```
114+
115+ ---
Original file line number Diff line number Diff line change 1+ import * as fs from 'fs' ;
2+
3+ const input = fs . readFileSync ( '/dev/stdin' , 'utf8' ) . trim ( ) ;
4+ const x = parseInt ( input ) ;
5+
6+ /**
7+ * 32ビット整数の範囲
8+ */
9+ const INT_MIN = - ( 2 ** 31 ) ;
10+ const INT_MAX = 2 ** 31 - 1 ;
11+
12+ function reverse ( x : number ) : number {
13+ let result = 0 ;
14+ let num = x ;
15+
16+ while ( num !== 0 ) {
17+ const digit = num % 10 | 0 ; // 小数点対策で |0 して整数化
18+ num = ( num / 10 ) | 0 ;
19+
20+ // resultが次の桁を追加したときにオーバーフローしないか確認
21+ if (
22+ result > Math . floor ( INT_MAX / 10 ) ||
23+ ( result === Math . floor ( INT_MAX / 10 ) && digit > 7 )
24+ ) {
25+ return 0 ;
26+ }
27+ if (
28+ result < Math . ceil ( INT_MIN / 10 ) ||
29+ ( result === Math . ceil ( INT_MIN / 10 ) && digit < - 8 )
30+ ) {
31+ return 0 ;
32+ }
33+
34+ result = result * 10 + digit ;
35+ }
36+
37+ return result ;
38+ }
39+
40+ console . log ( reverse ( x ) ) ;
Original file line number Diff line number Diff line change @@ -127,3 +127,11 @@ dp: 1 0 1 2 2 1 7
127127| 最終出力 | ` dp[ゴールのインデックス] ` が答え |
128128
129129---
130+
131+ | [ 提出日時] ( https://atcoder.jp/contests/tessoku-book/submissions/me?desc=true&orderBy=created ) | 問題 | ユーザ | 言語 | [ 得点] ( https://atcoder.jp/contests/tessoku-book/submissions/me?desc=true&orderBy=score ) | [ コード長] ( https://atcoder.jp/contests/tessoku-book/submissions/me?orderBy=source_length ) | 結果 | [ 実行時間] ( https://atcoder.jp/contests/tessoku-book/submissions/me?orderBy=time_consumption ) | [ メモリ] ( https://atcoder.jp/contests/tessoku-book/submissions/me?orderBy=memory_consumption ) | |
132+ | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
133+ | 2025-07-01 18:36:39 | [ A76 - River Crossing] ( https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_bx ) | [ myoshizumi] ( https://atcoder.jp/users/myoshizumi ) | [ PHP (php 8.2.8)] ( https://atcoder.jp/contests/tessoku-book/submissions/me?f.Language=5016 ) | 1000 | 2451 Byte | | 248 ms | 46648 KiB | [ 詳細] ( https://atcoder.jp/contests/tessoku-book/submissions/67219001 ) |
134+ | 2025-07-01 18:33:18 | [ A76 - River Crossing] ( https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_bx ) | [ myoshizumi] ( https://atcoder.jp/users/myoshizumi ) | [ Go (go 1.20.6)] ( https://atcoder.jp/contests/tessoku-book/submissions/me?f.Language=5002 ) | 1000 | 1925 Byte | | 56 ms | 15992 KiB | [ 詳細] ( https://atcoder.jp/contests/tessoku-book/submissions/67218947 ) |
135+ | 2025-07-01 18:27:47 | [ A76 - River Crossing] ( https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_bx ) | [ myoshizumi] ( https://atcoder.jp/users/myoshizumi ) | [ Python (CPython 3.11.4)] ( https://atcoder.jp/contests/tessoku-book/submissions/me?f.Language=5055 ) | 1000 | 1741 Byte | | 473 ms | 39756 KiB | [ 詳細] ( https://atcoder.jp/contests/tessoku-book/submissions/67218847 ) |
136+ | 2025-07-01 18:16:16 | [ A76 - River Crossing] ( https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_bx ) | [ myoshizumi] ( https://atcoder.jp/users/myoshizumi ) | [ TypeScript 5.1 (Node.js 18.16.1)] ( https://atcoder.jp/contests/tessoku-book/submissions/me?f.Language=5058 ) | 1000 | 2371 Byte | | 150 ms | 86184 KiB | [ 詳細] ( https://atcoder.jp/contests/tessoku-book/submissions/67218646 ) |
137+ | 2025-07-01 18:14:02 | [ A76 - River Crossing] ( https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_bx ) | [ myoshizumi] ( https://atcoder.jp/users/myoshizumi ) | [ JavaScript (Node.js 18.16.1)] ( https://atcoder.jp/contests/tessoku-book/submissions/me?f.Language=5009 ) | 1000 | 2694 Byte | | 183 ms | 88068 KiB | [ 詳細] ( https://atcoder.jp/contests/tessoku-book/submissions/67218589 ) |
You can’t perform that action at this time.
0 commit comments