将正整数连接起来可以得到一个无理小数:
0.123456789101112131415161718192021...
可以看出小数部分的第12位是1。
如果用dn表示这个数小数部分的第n位,找出如下表达式的值:
d1 d10 d100 d1000 d10000 d100000 d1000000
public class Problem40
{
public static void main(String[] args)
{
long start = System.currentTimeMillis();
System.out.print("answer: ");
howmany();
long end = System.currentTimeMillis();
System.out.print("time: ");
System.out.println(end - start);
}
static void howmany()
{
num(1);
int mul = 1; //1的时候
//10 100 ......
for (int i = 1; i <= 6; i++)
{
mul *= num ((int)(Math.pow(10, i)));
}
System.out.println(mul);
}
// n位数 一共有几个数字
static int weishu(int n)
{
int t = (int)Math.pow(10, n - 1) * 9;
return t * n;
}
//获得所需要的 数
static int num(int n)
{
int sum = 0;
int temp = 0;
int i = 1;
for (; (temp = weishu(i) + sum) < n; i++)
{
sum = temp;
}
int shang = (n - sum) / i; //商
int yu = (n - sum) % i; //余数
int an =(int)Math.pow(10, i - 1) + shang;//得到数在哪个大数中, 用余数来取得数
String a = "";
if(yu == 0)
{
a = (an + "").substring((an + "").length() - 1);
}
else
{
a = (an + "").substring(yu - 1,yu);
}
return Integer.parseInt(a);
}
}
answer: 210
time: 1