public int numberOf1Between1AndN_Solution(int n) { //用于记录结果 int res = 0; //用于记录运算的数值 int g = n % 10; //用于记录运算数值前面的数值 n = n / 10; //用于记录运算的数字的权值 int t = 1; //用于记录运算的位数的前面的数值 int q = 0; while (g != 0 || n != 0) { //如果个位大于一,那么个位的数值就会出现一次,如果小于一,那么一次都有不会出现 int col = g >= 1 ? 1 : 0; //如果非个位数值大于零,就是把个位的数值出现的次数 if (n > 0) { res += (t * (n + col)); System.out.println(res); } else { //如果十位数字为一,那么就需要加上各位数字的值再加一(因为有一个0) if (g == 1) { res += q + 1; } else { //如果十位数字大于一,那么就只需要加上后面的数值的次方即可 res += t; } } q += t * g; t *= 10; g = n % 10; n = n / 10; } return res; }
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交