MT2018笔试题之计算数字位数

时间:2022-06-29 04:18:35

一、计算数字位数

1、题目

给定一个数字T,计算从1到T的所有正整数的位数和。比如T=13,则12345678910111213有17位数字。

输入描述

3

13 4 5

输出

17 4 5

2、思路

详见代码部分

3、代码

import java.util.Scanner;

/**
* Created by Administrator on 2018/4/20.
*/ public class Main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
//输入数据组数
int T = sc.nextInt();
//输入数据
int[] arr = new int[T];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
//计算
int result ;
for (int i = 0; i < arr.length; i++) {
result = bitNum(arr[i]);
System.out.println(result);
} }
sc.close();
} public static int bitNum(int n) {
//计算n的位数
int num = n;
int count = 0;
while (n > 0) {
n = n / 10;
count++;
} //如果为1位数
if (count == 1) {
return num;
} //如果不是1位数,计算总的位数 int num1 = 0; //总位数的一部分
for (int i = 0; i < count-1; i++) {
num1 += 9 * Math.pow(10, i) * (i + 1);
} int temp1 = (int) (num % Math.pow(10,count-1));//去掉最高位剩下的数
int temp2 = (int) (num / Math.pow(10,count-1)); //数的最高位
int num2 = (int) ((temp1 + 1) * count + (temp2 - 1) * Math.pow(10,count-1) * count); //总位数的另一部分
return num1 + num2;
}
}

-------------------------------------------

答案仅供参考