POJ 1331 確定進位制 很自豪的一個題巧妙的應用了異常處理
阿新 • • 發佈:2018-12-20
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; } } } }