如何从不使用字符串的整数中快速删除尾随零?
例如,1000
必须变为1
,6789000
必须变为6789
。
简易解决方案是反复按10^max_exponent
,...,10000
,1000
,100
,10
(或相反的顺序)进行除法模式)等等,并将其与0
进行比较。
但有人能更快地做到吗?
答案 0 :(得分:3)
基本上这是按权力10进行二元搜索:
if N mod 100000000 = 0
N = N div 100000000;
if N mod 10000 = 0
N = N div 10000;
if N mod 10000 = 0
N = N div 10000;
if N mod 100 = 0
N = N div 100;
if N mod 10 = 0
N = N div 10;
答案 1 :(得分:0)
如果您使用该数字的Log10,您可以计算它有多少位数。使用此信息,您可以以比您的数字更大的10的最小功率开始您的分工过程。然后,您可以消除一些mod测试和分区。你可以做一个循环来简化代码。
伪代码:
digit_count = log10(num) + 1
pow = 10^digit_count
for (int i = 0; i < digit_count; i++) {
if (num mod pow == 0) {
num /= pow
}
pow /= 10
}
return num