java算法----求从1到N中,4出现的个数,N=155
时间: 2024-03-07 15:50:37 浏览: 13
以下是求从1到N中4出现的个数的Java算法实现:
```java
public static int countFour(int n) {
int count = 0;
for (int i = 1; i <= n; i++) {
int j = i;
while (j != 0) {
if (j % 10 == 4) {
count++;
}
j /= 10;
}
}
return count;
}
// 调用
int n = 155;
int count = countFour(n);
System.out.println("从1到" + n + "中4出现的个数为:" + count);
```
算法思路如下:
1. 对于每个数i,将它的每一位数字取出来;
2. 如果这个数字等于4,计数器加1;
3. 继续处理下一位数字,直到所有数字都处理完毕。
时间复杂度为O(NlogN),空间复杂度为O(1)。
相关问题
java算法----求从1到N中,4出现的个数
可以使用上述数学方法和计算方法来求解这个问题。以数学方法为例:
假设要求 1 到 N 中数字 4 出现的次数,可以将 N 分解为两部分,分别是 4 的最高位(高位)和除去最高位后的低位部分。设 N 的最高位为 h,设除去最高位后的低位部分为 l,则有以下三种情况:
1)h < 4,此时 4 在 N 的最高位出现的次数为 l * 10^(n-1),其中 n 是 N 的位数;
2)h = 4,此时 4 在 N 的最高位出现的次数为 l * 10^(n-1) + (N mod 10^(n-1)) + 1;
3)h > 4,此时 4 在 N 的最高位出现的次数为 (l + 1) * 10^(n-1)。
参照以上三种情况,可以递归地求解出 1 到 N 中数字 4 出现的次数。具体实现可以参考下面的 Java 代码:
```
public static int countDigitFour(int n) {
if (n <= 0) {
return 0;
}
int res = 0;
int digit = 1;
int high = n / 10;
int cur = n % 10;
int low = 0;
while (high != 0 || cur != 0) {
if (cur < 4) {
res += high * digit;
} else if (cur == 4) {
res += high * digit + low + 1;
} else {
res += (high + 1) * digit;
}
low += cur * digit;
cur = high % 10;
high /= 10;
digit *= 10;
}
return res;
}
```
以上代码可以求解从 1 到 N 中数字 4 出现的次数。如果要求其它数字出现的次数,可以将代码中的 4 替换为其它数字即可。
java算法----求从1到N中,某数出现的个数
你好,关于求从1到N中某数出现的个数的问题,可以使用以下的Java代码实现:
```java
public static int countDigit(int n, int digit) {
if (n < 0 || digit < 0 || digit > 9) {
return 0;
}
int count = 0;
int base = 1;
int round = n;
while (round > 0) {
int weight = round % 10;
round /= 10;
count += round * base;
if (weight == digit) {
count += (n % base) + 1;
}
if (digit == 0 && round == 0) {
count -= base;
}
base *= 10;
}
return count;
}
```
其中,`n`表示需要计算的范围,`digit`表示需要统计的数字。这个算法的基本思路是将数字拆分成各位数字,再统计每个数字的个数。具体实现过程可以参考代码注释。
希望能够对你有所帮助!