将等式转化为代码
Turn equation into code
The number of zero digits in the range [m,n]
好的,所以我正在尝试将这个公式(在 link 提供的图片中)转换为 java 代码,我已经开始了,但我不确定我是否正确地完成了。有人看到它有什么问题吗?(变量很长,因为我将在方程中插入非常大的数字)
long loop1 = 0, loop2 = 0;
// put in a loop
for (int k = 1; k < n; k++) {
for (int i = 0; i < Math.log10(k); i++) {
loop1 += (1 - ((((k / Math.pow(10, i)) - (10 * (k / Math.pow(10, i + 1))))) / 10));
}
}
for (int k = 1; k < m - 1; k++) {
for (int i = 0; i < Math.log10(k); i++) {
loop2 += (1 - ((((k / Math.pow(10, i)) - (10 * (k / Math.pow(10, i + 1))))) / 10));
}
}
answer = loop1 - loop2;
多个问题。这里有一些。
for (int k = 1; k < n; k++) { // SHOULD BE k <= n.
for (int i = 0; i < Math.log10(k); i++) { // AGAIN USE <=
// USE CEILING AND FLOOR FUNCTIONS NOT POWER. USE DOUBLE PRECISION NOT INTEGER.
loop1 += (1 - ((((k / Math.pow(10, i)) - (10 * (k / Math.pow(10, i + 1))))) / 10));
}
}
似乎是一个需要解决的有趣问题。这就是我使用 mod 和除法运算符的意思。但这随着 n 的增加而线性减慢。也许另一种试用方法是使用记忆。我会尝试另一种方法,然后 post 返回。
public class ZeroCount {
public static void main(String[] args) {
long start = Long.parseLong(args[0]);
long end = Long.parseLong(args[1]);
System.out.println("Number of zeros encountered from [" + start + "] to [" + end + "] : " +getZeroCount(start, end));
}
public static long getZeroCount(long begin, long end) {
long zeroCount = 0;
for (long curNum = begin; curNum <= end; curNum++) {
if (curNum == 0) {
zeroCount++;
continue;
}
long tempNum = curNum;
while (tempNum / 10.0 > 0) {
if (tempNum % 10 == 0) {
zeroCount++;
}
tempNum /= 10;
}
}
return zeroCount;
}
}
结果:
jeetatl$ time java ZeroCount 0 100
Number of zeros encountered from [0] to [100] : 12
real 0m0.066s
user 0m0.049s
sys 0m0.014s
jeetatl$ time java ZeroCount 0 1000
Number of zeros encountered from [0] to [1000] : 193
real 0m0.070s
user 0m0.051s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 10000
Number of zeros encountered from [0] to [10000] : 2894
real 0m0.091s
user 0m0.061s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 100000
Number of zeros encountered from [0] to [100000] : 38895
real 0m0.076s
user 0m0.059s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 1000000
Number of zeros encountered from [0] to [1000000] : 488896
real 0m0.130s
user 0m0.114s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 10000000
Number of zeros encountered from [0] to [10000000] : 5888897
real 0m0.606s
user 0m0.592s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 100000000
Number of zeros encountered from [0] to [100000000] : 68888898
real 0m6.756s
user 0m6.728s
sys 0m0.024s
jeetatl$ time java ZeroCount 0 1000000000
Number of zeros encountered from [0] to [1000000000] : 788888899
real 1m8.226s
user 1m8.191s
sys 0m0.041s
The number of zero digits in the range [m,n]
好的,所以我正在尝试将这个公式(在 link 提供的图片中)转换为 java 代码,我已经开始了,但我不确定我是否正确地完成了。有人看到它有什么问题吗?(变量很长,因为我将在方程中插入非常大的数字)
long loop1 = 0, loop2 = 0;
// put in a loop
for (int k = 1; k < n; k++) {
for (int i = 0; i < Math.log10(k); i++) {
loop1 += (1 - ((((k / Math.pow(10, i)) - (10 * (k / Math.pow(10, i + 1))))) / 10));
}
}
for (int k = 1; k < m - 1; k++) {
for (int i = 0; i < Math.log10(k); i++) {
loop2 += (1 - ((((k / Math.pow(10, i)) - (10 * (k / Math.pow(10, i + 1))))) / 10));
}
}
answer = loop1 - loop2;
多个问题。这里有一些。
for (int k = 1; k < n; k++) { // SHOULD BE k <= n.
for (int i = 0; i < Math.log10(k); i++) { // AGAIN USE <=
// USE CEILING AND FLOOR FUNCTIONS NOT POWER. USE DOUBLE PRECISION NOT INTEGER.
loop1 += (1 - ((((k / Math.pow(10, i)) - (10 * (k / Math.pow(10, i + 1))))) / 10));
}
}
似乎是一个需要解决的有趣问题。这就是我使用 mod 和除法运算符的意思。但这随着 n 的增加而线性减慢。也许另一种试用方法是使用记忆。我会尝试另一种方法,然后 post 返回。
public class ZeroCount {
public static void main(String[] args) {
long start = Long.parseLong(args[0]);
long end = Long.parseLong(args[1]);
System.out.println("Number of zeros encountered from [" + start + "] to [" + end + "] : " +getZeroCount(start, end));
}
public static long getZeroCount(long begin, long end) {
long zeroCount = 0;
for (long curNum = begin; curNum <= end; curNum++) {
if (curNum == 0) {
zeroCount++;
continue;
}
long tempNum = curNum;
while (tempNum / 10.0 > 0) {
if (tempNum % 10 == 0) {
zeroCount++;
}
tempNum /= 10;
}
}
return zeroCount;
}
}
结果:
jeetatl$ time java ZeroCount 0 100
Number of zeros encountered from [0] to [100] : 12
real 0m0.066s
user 0m0.049s
sys 0m0.014s
jeetatl$ time java ZeroCount 0 1000
Number of zeros encountered from [0] to [1000] : 193
real 0m0.070s
user 0m0.051s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 10000
Number of zeros encountered from [0] to [10000] : 2894
real 0m0.091s
user 0m0.061s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 100000
Number of zeros encountered from [0] to [100000] : 38895
real 0m0.076s
user 0m0.059s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 1000000
Number of zeros encountered from [0] to [1000000] : 488896
real 0m0.130s
user 0m0.114s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 10000000
Number of zeros encountered from [0] to [10000000] : 5888897
real 0m0.606s
user 0m0.592s
sys 0m0.015s
jeetatl$ time java ZeroCount 0 100000000
Number of zeros encountered from [0] to [100000000] : 68888898
real 0m6.756s
user 0m6.728s
sys 0m0.024s
jeetatl$ time java ZeroCount 0 1000000000
Number of zeros encountered from [0] to [1000000000] : 788888899
real 1m8.226s
user 1m8.191s
sys 0m0.041s