@@ -56,3 +56,202 @@ inline uint64_t intExp10(int x)
5656
5757 return table[x];
5858}
59+
60+ constexpr int64_t exp10_i64_table[]
61+ = {1LL ,
62+ 10LL ,
63+ 100LL ,
64+ 1000LL ,
65+ 10000LL ,
66+ 100000LL ,
67+ 1000000LL ,
68+ 10000000LL ,
69+ 100000000LL ,
70+ 1000000000LL ,
71+ 10000000000LL ,
72+ 100000000000LL ,
73+ 1000000000000LL ,
74+ 10000000000000LL ,
75+ 100000000000000LL ,
76+ 1000000000000000LL ,
77+ 10000000000000000LL ,
78+ 100000000000000000LL ,
79+ 1000000000000000000LL };
80+
81+ constexpr Int128 exp10_i128_table[]
82+ = {static_cast <Int128>(1LL ),
83+ static_cast <Int128>(10LL ),
84+ static_cast <Int128>(100LL ),
85+ static_cast <Int128>(1000LL ),
86+ static_cast <Int128>(10000LL ),
87+ static_cast <Int128>(100000LL ),
88+ static_cast <Int128>(1000000LL ),
89+ static_cast <Int128>(10000000LL ),
90+ static_cast <Int128>(100000000LL ),
91+ static_cast <Int128>(1000000000LL ),
92+ static_cast <Int128>(10000000000LL ),
93+ static_cast <Int128>(100000000000LL ),
94+ static_cast <Int128>(1000000000000LL ),
95+ static_cast <Int128>(10000000000000LL ),
96+ static_cast <Int128>(100000000000000LL ),
97+ static_cast <Int128>(1000000000000000LL ),
98+ static_cast <Int128>(10000000000000000LL ),
99+ static_cast <Int128>(100000000000000000LL ),
100+ static_cast <Int128>(1000000000000000000LL ),
101+ static_cast <Int128>(1000000000000000000LL ) * 10LL ,
102+ static_cast <Int128>(1000000000000000000LL ) * 100LL ,
103+ static_cast <Int128>(1000000000000000000LL ) * 1000LL ,
104+ static_cast <Int128>(1000000000000000000LL ) * 10000LL ,
105+ static_cast <Int128>(1000000000000000000LL ) * 100000LL ,
106+ static_cast <Int128>(1000000000000000000LL ) * 1000000LL ,
107+ static_cast <Int128>(1000000000000000000LL ) * 10000000LL ,
108+ static_cast <Int128>(1000000000000000000LL ) * 100000000LL ,
109+ static_cast <Int128>(1000000000000000000LL ) * 1000000000LL ,
110+ static_cast <Int128>(1000000000000000000LL ) * 10000000000LL ,
111+ static_cast <Int128>(1000000000000000000LL ) * 100000000000LL ,
112+ static_cast <Int128>(1000000000000000000LL ) * 1000000000000LL ,
113+ static_cast <Int128>(1000000000000000000LL ) * 10000000000000LL ,
114+ static_cast <Int128>(1000000000000000000LL ) * 100000000000000LL ,
115+ static_cast <Int128>(1000000000000000000LL ) * 1000000000000000LL ,
116+ static_cast <Int128>(1000000000000000000LL ) * 10000000000000000LL ,
117+ static_cast <Int128>(1000000000000000000LL ) * 100000000000000000LL ,
118+ static_cast <Int128>(1000000000000000000LL ) * 100000000000000000LL * 10LL ,
119+ static_cast <Int128>(1000000000000000000LL ) * 100000000000000000LL * 100LL ,
120+ static_cast <Int128>(1000000000000000000LL ) * 100000000000000000LL * 1000LL };
121+
122+ constexpr Int256 i10e18{1000000000000000000ll };
123+ constexpr Int256 exp10_i256_table[] = {
124+ static_cast <Int256>(1ll ),
125+ static_cast <Int256>(10ll ),
126+ static_cast <Int256>(100ll ),
127+ static_cast <Int256>(1000ll ),
128+ static_cast <Int256>(10000ll ),
129+ static_cast <Int256>(100000ll ),
130+ static_cast <Int256>(1000000ll ),
131+ static_cast <Int256>(10000000ll ),
132+ static_cast <Int256>(100000000ll ),
133+ static_cast <Int256>(1000000000ll ),
134+ static_cast <Int256>(10000000000ll ),
135+ static_cast <Int256>(100000000000ll ),
136+ static_cast <Int256>(1000000000000ll ),
137+ static_cast <Int256>(10000000000000ll ),
138+ static_cast <Int256>(100000000000000ll ),
139+ static_cast <Int256>(1000000000000000ll ),
140+ static_cast <Int256>(10000000000000000ll ),
141+ static_cast <Int256>(100000000000000000ll ),
142+ i10e18,
143+ i10e18 * 10ll ,
144+ i10e18 * 100ll ,
145+ i10e18 * 1000ll ,
146+ i10e18 * 10000ll ,
147+ i10e18 * 100000ll ,
148+ i10e18 * 1000000ll ,
149+ i10e18 * 10000000ll ,
150+ i10e18 * 100000000ll ,
151+ i10e18 * 1000000000ll ,
152+ i10e18 * 10000000000ll ,
153+ i10e18 * 100000000000ll ,
154+ i10e18 * 1000000000000ll ,
155+ i10e18 * 10000000000000ll ,
156+ i10e18 * 100000000000000ll ,
157+ i10e18 * 1000000000000000ll ,
158+ i10e18 * 10000000000000000ll ,
159+ i10e18 * 100000000000000000ll ,
160+ i10e18 * 100000000000000000ll * 10ll ,
161+ i10e18 * 100000000000000000ll * 100ll ,
162+ i10e18 * 100000000000000000ll * 1000ll ,
163+ i10e18 * 100000000000000000ll * 10000ll ,
164+ i10e18 * 100000000000000000ll * 100000ll ,
165+ i10e18 * 100000000000000000ll * 1000000ll ,
166+ i10e18 * 100000000000000000ll * 10000000ll ,
167+ i10e18 * 100000000000000000ll * 100000000ll ,
168+ i10e18 * 100000000000000000ll * 1000000000ll ,
169+ i10e18 * 100000000000000000ll * 10000000000ll ,
170+ i10e18 * 100000000000000000ll * 100000000000ll ,
171+ i10e18 * 100000000000000000ll * 1000000000000ll ,
172+ i10e18 * 100000000000000000ll * 10000000000000ll ,
173+ i10e18 * 100000000000000000ll * 100000000000000ll ,
174+ i10e18 * 100000000000000000ll * 1000000000000000ll ,
175+ i10e18 * 100000000000000000ll * 10000000000000000ll ,
176+ i10e18 * 100000000000000000ll * 100000000000000000ll ,
177+ i10e18 * 100000000000000000ll * 100000000000000000ll * 10ll ,
178+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100ll ,
179+ i10e18 * 100000000000000000ll * 100000000000000000ll * 1000ll ,
180+ i10e18 * 100000000000000000ll * 100000000000000000ll * 10000ll ,
181+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000ll ,
182+ i10e18 * 100000000000000000ll * 100000000000000000ll * 1000000ll ,
183+ i10e18 * 100000000000000000ll * 100000000000000000ll * 10000000ll ,
184+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000ll ,
185+ i10e18 * 100000000000000000ll * 100000000000000000ll * 1000000000ll ,
186+ i10e18 * 100000000000000000ll * 100000000000000000ll * 10000000000ll ,
187+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000ll ,
188+ i10e18 * 100000000000000000ll * 100000000000000000ll * 1000000000000ll ,
189+ i10e18 * 100000000000000000ll * 100000000000000000ll * 10000000000000ll ,
190+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000ll ,
191+ i10e18 * 100000000000000000ll * 100000000000000000ll * 1000000000000000ll ,
192+ i10e18 * 100000000000000000ll * 100000000000000000ll * 10000000000000000ll ,
193+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000000ll ,
194+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000000ll * 10ll ,
195+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000000ll * 100ll ,
196+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000000ll * 1000ll ,
197+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000000ll * 10000ll ,
198+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000000ll * 100000ll ,
199+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000000ll * 1000000ll ,
200+ i10e18 * 100000000000000000ll * 100000000000000000ll * 100000000000000000ll * 10000000ll ,
201+ };
202+
203+ constexpr int exp10_i32 (int x)
204+ {
205+ if (x < 0 )
206+ return 0 ;
207+ if (x > 9 )
208+ return std::numeric_limits<int >::max ();
209+
210+ constexpr int exp10_i32_table[10 ] = {1 , 10 , 100 , 1000 , 10000 , 100000 , 1000000 , 10000000 , 100000000 , 1000000000 };
211+ return exp10_i32_table[x];
212+ }
213+
214+ constexpr int64_t exp10_i64 (int x)
215+ {
216+ if (x < 0 )
217+ return 0 ;
218+ if (x > 18 )
219+ return std::numeric_limits<int64_t >::max ();
220+
221+ return exp10_i64_table[x];
222+ }
223+
224+ constexpr Int128 exp10_i128 (int x)
225+ {
226+ if (x < 0 )
227+ return 0 ;
228+ if (x > 38 )
229+ return std::numeric_limits<Int128>::max ();
230+
231+ return exp10_i128_table[x];
232+ }
233+
234+ constexpr Int256 exp10_i256 (int x)
235+ {
236+ if (x < 0 )
237+ return 0 ;
238+ if (x > 76 )
239+ return std::numeric_limits<Int256>::max ();
240+
241+ return exp10_i256_table[x];
242+ }
243+
244+
245+ // / intExp10 returning the type T.
246+ template <typename T>
247+ T intExp10OfSize (int x)
248+ {
249+ if constexpr (sizeof (T) <= 4 )
250+ return static_cast <T>(exp10_i32 (x));
251+ else if constexpr (sizeof (T) <= 8 )
252+ return exp10_i64 (x);
253+ else if constexpr (sizeof (T) <= 16 )
254+ return exp10_i128 (x);
255+ else
256+ return exp10_i256 (x);
257+ }
0 commit comments