日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

百练OJ:2972: 确定进制

發布時間:2025/3/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百练OJ:2972: 确定进制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:

http://bailian.openjudge.cn/practice/2972/

描述: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

解題思路:

本題的解題思路主要是一個枚舉的方法,對于2-16進制的數轉為十進制的數,讓后進行一次判斷,知道判斷成功為止。需要注意的是:例如121這個數是不能轉換為二進制的,所以要判斷進制數不可低于數字中包含的數。可以發現:11(2) * 11(2) = 121(2)? ,如果不加以判斷,勢必導致結果錯誤

解題代碼:

import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner input =new Scanner(System.in);int p=input.nextInt();int q=input.nextInt();int r=input.nextInt();int c=0;for(int i=2;i<=16;i++){int p1=getNum(p,i);int q1=getNum(q,i);int r1=getNum(r,i);//System.out.println( i+"進制"+p1+" "+q1+" "+r1);if(p1*q1==r1 && p1!=0 && q1!=0 && r1!=0){c=i;break;}}System.out.println(c);}private static int getNum(int p, int i) {String str=String.valueOf(p);int sum = 0;for(int j=0;j<str.length();j++){int num=str.charAt(j)-48;if(num>=i){sum=0;break;}else{sum+=num* Math.pow(i,str.length()-1-j);}}return sum;}}

總結

以上是生活随笔為你收集整理的百练OJ:2972: 确定进制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。