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


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