从整数类型“修剪”正确的零

时间:2016-04-15 13:45:49

标签: algorithm language-agnostic numbers

如何从不使用字符串的整数中快速删除尾随零?

例如,1000必须变为16789000必须变为6789

简易解决方案是反复按10^max_exponent,...,10000100010010(或相反的顺序)进行除法模式)等等,并将其与0进行比较。

但有人能更快地做到吗?

2 个答案:

答案 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