1. 程式人生 > >POJ 1331 確定進位制 很自豪的一個題巧妙的應用了異常處理

POJ 1331 確定進位制 很自豪的一個題巧妙的應用了異常處理

5:確定進位制

總時間限制: 

1000ms

記憶體限制: 

65536kB

描述

6*9 = 42 對於十進位制來說是錯誤的,但是對於13進位制來說是正確的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131+ 2 * 130= 54(10)。 你的任務是寫一段程式讀入三個整數p、q和 r,然後確定一個進位制 B(2<=B<=16) 使得 p * q = r. 如果 B有很多選擇, 輸出最小的一個。例如: p = 11, q = 11, r = 121. 則有 11(3) * 11(3) = 121(3) 因為 11(3) = 1 * 31+ 1 * 30= 4(10) 和 121(3) = 1 * 32+ 2 * 31+ 1 * 30= 16(10)。 對於進位制 10,有 11(10) * 11(10) = 121(10)。這種情況下,應該輸出 3。如果沒有合適的進位制,則輸出 0。

輸入

一行,包含三個整數p、q、r,相鄰兩個整數之間用單個空格隔開。 p、q、r的所有位都是數字,並且1 <= p、q、r <= 1,000,000。

輸出

一個整數:即使得p * q = r成立的最小的B。如果沒有合適的B,則輸出 0。

樣例輸入

6 9 42

樣例輸出

13

來源

Taejon 2002, POJ 1331, 程式設計實習07

java考試題

感覺很不錯,自己很巧妙的結合進位制轉換函式 a=Integer.valueOf(s1,i); 和異常處理


import java.util.Arrays;
import java.util.Scanner;

public class Main {
	

	public static void main(String[] args)
	{
	 Scanner cin=new Scanner(System.in);
	String s1=cin.next();
	String s2=cin.next();
	String s3=cin.next();
	
	int a = 0,b=0,c=0;
	int flag=0;
	for(int i=2;;i++)
	{
		if(i>=1000000)
        {
        	System.out.println(0);
        	break;
        }
        try {
		 a=Integer.valueOf(s1,i); 
		 b=Integer.valueOf(s2,i);
		 c=Integer.valueOf(s3,i);
		  flag=1;
        }catch(NumberFormatException e)
        {
        	if(i>=1000000)
            {
            	System.out.println(0);
            	break;
            }
		 continue;
        }
        if(flag==1&&a*b==c)
		 {
			System.out.println(i);
			break;
		}
        if(i>=1000000)
        {
        	System.out.println(0);
        	break;
        }
	}
	}
}