Project Euler NO40

将正整数连接起来可以得到一个无理小数:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章