簡體   English   中英

兩個數字之間的總位數

[英]The total number of digits between two numbers

我現在正在開發一個程序,其中一部分要求我找到兩個整數之間的總位數,我已經計算出具有相同位數的整數,例如 1234 和 4980(都有四位數)但我似乎無法弄清楚數字位數不同的整數,即 3 和 5698(3 只有一位,5698 有四位)。 我怎么可能go這個呢?

男孩,算法並不明顯——你最后的評論相當重要。

顯然這個問題歸結為:

  • 對於 2 之間的每個“數字”,包括兩條邊,計算該數字有多少位數字。
  • 總結一下。

對於您的示例,它只是(4980 - 1234 + 1) * 4 = 14988。

聽起來您只需要 for-loop: for (int i = 1234; i <= 4980; i++) ,然后對於每個i只需計算出有多少位數字並將其相加。

一種直接的方法是使用對數。 integer n中的位數是(int)Math.log10(n)+1 假設您正在對 first thru last 進行包容性計算,它將如下所示:


int sum = 0;
int first = 3;
int last = 3333;
for (int i = first; i <= last; i++) {
    sum += Math.log10(i)+1;
}
System.out.println(sum);

印刷

12223

但是一種更有效且可能不太明顯的方法是放棄logs並簡單地分段計算。 這將減少循環的迭代次數。 這是通過計算增量的位數和冪來實現的。 我輸入了打印報表,以便您可以看到進度。

int digits = 1;
int power = 10;
int limit = last;
sum = 0;
while(power < limit) {
    if (power > first) {
        sum += (power - first) * digits;
        System.out.println(power + " " + first  + " " + digits + " : partial running sum = " + sum);
        first = power;
    }
    
    digits++;
    power*= 10;
}
sum += (limit - power/10 + 1)*digits;
System.out.println(limit + " " + power/10  + " " + digits + " : partial running sum = " + sum);
System.out.println(sum);

印刷

10 3 1 : partial running sum = 7
100 10 2 : partial running sum = 187
1000 100 3 : partial running sum = 2887
3333 1000 4 : final sum = 12223
12223

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM