[英]Regular Expression to check if decimal is between two numbers irrespective of number of digits after decimal point
[英]The total number of digits between two numbers
我現在正在開發一個程序,其中一部分要求我找到兩個整數之間的總位數,我已經計算出具有相同位數的整數,例如 1234 和 4980(都有四位數)但我似乎無法弄清楚數字位數不同的整數,即 3 和 5698(3 只有一位,5698 有四位)。 我怎么可能go這個呢?
男孩,算法並不明顯——你最后的評論相當重要。
顯然這個問題歸結為:
對於您的示例,它只是(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.