在从1到n的正数中1出现的次数 JAVA
答案:4 悬赏:10 手机版
解决时间 2021-04-28 06:36
- 提问者网友:椧運幽默
- 2021-04-27 21:40
在从1到n的正数中1出现的次数 JAVA
最佳答案
- 五星知识达人网友:独行浪子会拥风
- 2021-04-27 22:40
// 计算1-n中1出现的次数
public class CountOne {
// 思路:分别计算“1”在每个位上面出现的次数,叠加起来
public static int countNumOf1(int n) {
if (n <= 0) {
return 0;
}
int count = 0;
int factor = 1;
while(n / factor != 0) {
int lowerNum = n - n / factor * factor;
int currentNum = (n / factor) % 10;
int highNum = n / (factor * 10);
if (currentNum == 0) {
// 如果为0,出现1的次数由高位决定
count += highNum * factor;
} else if (currentNum == 1) {
// 如果为1,出现1的次数由高位和低位决定
count += highNum * factor + lowerNum + 1;
} else {
// 如果大于1,出现1的次数由高位决定
count += (highNum + 1) * factor;
}
factor *= 10;
}
return count;
}
public static void main(String[] args) {
// 测试
System.out.println(countNumOf1(13));
System.out.println(countNumOf1(23));
System.out.println(countNumOf1(33));
System.out.println(countNumOf1(93));
System.out.println(countNumOf1(123));
}
}
public class CountOne {
// 思路:分别计算“1”在每个位上面出现的次数,叠加起来
public static int countNumOf1(int n) {
if (n <= 0) {
return 0;
}
int count = 0;
int factor = 1;
while(n / factor != 0) {
int lowerNum = n - n / factor * factor;
int currentNum = (n / factor) % 10;
int highNum = n / (factor * 10);
if (currentNum == 0) {
// 如果为0,出现1的次数由高位决定
count += highNum * factor;
} else if (currentNum == 1) {
// 如果为1,出现1的次数由高位和低位决定
count += highNum * factor + lowerNum + 1;
} else {
// 如果大于1,出现1的次数由高位决定
count += (highNum + 1) * factor;
}
factor *= 10;
}
return count;
}
public static void main(String[] args) {
// 测试
System.out.println(countNumOf1(13));
System.out.println(countNumOf1(23));
System.out.println(countNumOf1(33));
System.out.println(countNumOf1(93));
System.out.println(countNumOf1(123));
}
}
全部回答
- 1楼网友:夜余生
- 2021-04-28 02:09
123123用一个for循环,从n开始,for(n=*;n>0;n--),然后用函数ltoa,将其变成字符串,再用一循环依次看是不是1,是就用变量k++,就行了。
这题好像不会这么出,应该给出十几位数! 这样就可以了
这题好像不会这么出,应该给出十几位数! 这样就可以了
- 2楼网友:低音帝王
- 2021-04-28 00:58
1+1
- 3楼网友:神鬼未生
- 2021-04-28 00:12
用一个for循环,从n开始,for(n=*;n>0;n--),然后用函数ltoa,将其变成字符串,再用一循环依次看是不是1,是就用变量k++,就行了。
这题好像不会这么出,应该给出十几位数!
这题好像不会这么出,应该给出十几位数!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯