1. 程式人生 > >面試題:輸入一個十進位制整數,將這個數字轉化成對應的十五進位制數(在十五進制中,A表示10,B表示11,C表示12,D表示13, E表示14),請寫入轉換程式。例如:235表示為10A;

面試題:輸入一個十進位制整數,將這個數字轉化成對應的十五進位制數(在十五進制中,A表示10,B表示11,C表示12,D表示13, E表示14),請寫入轉換程式。例如:235表示為10A;

如上是本人一位朋友的公司出的研發小測試,小朋友是一臉懵逼啊!

分析:進位制轉換思路:10進位制除以15商和餘數,反覆拿商除以15獲得商和餘數,類推,知道商為0,停止;

以235表示為10A為例分析:

235/15 = 15 餘數10

15/15 = 1 餘數 0

1/15 = 0 餘數 1

得到資料10, 0, 1, 反序結果為1, 0, 10, 對比結果: 1-》1, 0-》0, 10-》A, 所以235表示的十五進位制數為:10A;

具體實現如下:

@Test
	public void test() {
		Scanner scanner = new Scanner(System.in);
		System.out.println("請輸入十進位制數字:");
		/**
		 * Integer.parseInt(scanner.next(), 10); 10 代表的預設是10進位制的
		 * Character.MIN_RADIX=2和Character.MAX_RADIX=36
		 * parseInt(String s, int radix)引數中radix的範圍是在2~36之間,超出範圍會拋異常。其中s的長度也不能超出7,否則也會拋異常。
		 */
		Integer in = Integer.parseInt(scanner.next(), 10);
		List<Object> list = new ArrayList<Object>();
		while (true) {
			list.add(in % 15); // 取餘數
			in = in / 15; // 取餘數
			if (in == 0) { // 停止迴圈
				break;
			}
		}
		StringBuffer str = new StringBuffer(); // 拼接字串
		// 倒排
		for (int i = list.size() - 1; i >= 0; i--) {
			int number = (int) list.get(i);
			if (number == 10) {
				str.append("A");
			} else if (number == 11) {
				str.append("B");
			} else if (number == 12) {
				str.append("C");
			} else if (number == 13) {
				str.append("D");
			} else if (i == 14) {
				str.append("E");
			} else {
				str.append(number);
			}
		}
		System.out.println(str);
		//關流
		scanner.close(); 
	}

parseInt(String s, int radix)原始碼:

    if (s == null) {
        throw new NumberFormatException("null");
    }

    if (radix < Character.MIN_RADIX) {
        throw new NumberFormatException("radix " + radix +
                                            " less than Character.MIN_RADIX");
    }

    if (radix > Character.MAX_RADIX) {
         throw new NumberFormatException("radix " + radix +
                                            " greater than Character.MAX_RADIX");
    }


    /**
     * The minimum radix available for conversion to and from strings.
     * The constant value of this field is the smallest value permitted
     * for the radix argument in radix-conversion methods such as the
     * {@code digit} method, the {@code forDigit} method, and the
     * {@code toString} method of class {@code Integer}.
     *
     * @see     Character#digit(char, int)
     * @see     Character#forDigit(int, int)
     * @see     Integer#toString(int, int)
     * @see     Integer#valueOf(String)
     */
    public static final int MIN_RADIX = 2;

    /**
     * The maximum radix available for conversion to and from strings.
     * The constant value of this field is the largest value permitted
     * for the radix argument in radix-conversion methods such as the
     * {@code digit} method, the {@code forDigit} method, and the
     * {@code toString} method of class {@code Integer}.
     *
     * @see     Character#digit(char, int)
     * @see     Character#forDigit(int, int)
     * @see     Integer#toString(int, int)
     * @see     Integer#valueOf(String)
     */
    public static final int MAX_RADIX = 36;

相關推薦

試題輸入一個十進位制整數這個數字轉化對應A表示10B表示11C表示12D表示13 E表示14寫入轉換程式例如235表示10A

如上是本人一位朋友的公司出的研發小測試,小朋友是一臉懵逼啊! 分析:進位制轉換思路:10進位制除以15商和餘數,反覆拿商除以15獲得商和餘數,類推,知道商為0,停止; 以235表示為10A為例分析: 235/15 = 15 餘數10 15/15 = 1 餘數

網易筆試題輸入一個整數若該能用幾個連續正整數之和表示則輸出所有可能的正整數序列

解題思路:           **找到數學規律。n以i為開頭的j個整數的和為i*j+j*(j-1)/2;判斷輸入的整數是否和計算結果相同。           如果相同則迴圈輸出以i為開頭的j個整數。           這個題目給我最大的啟示就是要學會用數學的方法來解決問題,在此之前我一直希望通過一種遞

輸入一個十進位制整數設計遞迴函式整數轉化一個二進位制 思考: 如何一個十進位制轉化一個8和16

1,輸入一個十進位制整數,設計遞迴函式,將該整數轉化為一個二進位制數。思考: 如何將一個十進位制數轉化成一個8進位制和16進位制數。 #include<stdio.h> #define  N  20 int main() { int a,n,c,k,i; cha

N的階乘輸入一個整數N輸出N的階乘

輸入描述: 正整數N(0<=N<=1000) 輸出描述: 輸入可能包括多組資料,對於每一組輸入資料,輸出N的階乘 輸入例子: 4 5 15 輸出例子: 24 120 13076743680

大一上C語言期末複習輸入一個整數其分解質因數如90=2*3*3*5

//輸入一個正整數,將其分解為質因數,如90=2*3*3*5 #include <stdio.h> int main() { int n,i; while(scanf("%d",&n)) { if(n==1) { printf("n=

python程式設計輸入一個整數判斷它是不是素數

輸入一個正整數判斷它是不是素數 from math import sqrt def main(): num = int(input('請輸入一個正整數: ')) end = int(sqrt(num)) is_prime = T

求接題目輸入一個字符串輸出大小寫數字及其他字符的個數並逆序輸出

v2v SQ 逆序輸出 Go 大小寫 target clu 數字 targe 9wwwp0b5mw啥睪約抑汕丶防內肯勸《http://weibo.com/p/230927987600061628162048》 rvzxpb9vfd腫氨撩都幣渦綽腔腳備《http://wei

HTTP請求行包含哪些內容?A、請求方法 B、資源名稱 C、版本號 D、狀態程式碼

答案:ABC解析:Http請求是指從客戶端到伺服器端的請求訊息。該請求訊息包括,在訊息首行中,對資源的請求方法、資源的識別符號及使用的協議。HTTP請求資訊由3部分組成:l 請求方法URI協議/版本l 請求頭(Request Header)l 請求正文HTTP響應HTTP應

劍指offer第32題JS演算法輸入一個整數n求從1到n這n個整數十進位制表示1出現的次數例如輸入12從1到12這些整數包含1的數字有11011121一共出現了5次

題目:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次 這是我某一次去朋友公司面試試水時出的面試題,結果給我五分鐘我寫了個for迴圈的方法,被狠狠鄙視/哭笑不得 結果回來後好奇就跟同事

C#試題輸入一個長度100的數字字串判斷是否能被7整除

輸入一個長度為100的數字字串,首字元不能是0,判斷是否能被7整除。 思路:把字串中各個位數字拿出來與7取餘,如果最後為0,表示可以整除,不為0表示不能整除。 例如:504:5%=5,50%7=1,14%7=0等於0。那麼504能被7整除。             21

11. 微軟試題輸入一個單向連結串列輸出該連結串列倒數第k個結點連結串列的倒數第0個結點連結串列的尾指標

題目:輸入一個單向連結串列,輸出該連結串列中倒數第k個結點。連結串列的倒數第0個結點為連結串列的尾指標。 分析: 單鏈表只能向後遍歷,不能向前遍歷,尾指標好找,倒數第K個不能從尾指標向前找。 倒的不好找,正的好找,我們只需要知道連結串列的總長度,就可以知道正數第幾個節點(

試題輸入一個整數輸出該整數二進位制1的個數

程式碼:C語言 //輸入一個整數,輸出該整數二進位制中1的個數。其中負數用補碼錶示。 //左移運算子是用來將一個數的各二進位制位全部左移若干位。相當於乘法運算,表示為"<<" //右移運算子是用來將一個數的各二進位制位全部右移若干位。相當於除

三種方式求 輸入一個整數輸出該表示1的個數其中負數用補碼表示

情況 temp 進制數 二進制表示 pac print 類型 solution 方式 package com.example; public class Solution { /* * 轉化成2進制數計算 */ public int NumberOf1(int n) {

C++入門篇——輸入一個整數這個整數分別以八十進位制輸出同時輸入一個布林值並且以布林值的方式打印出來

C++入門篇 輸入一個整數並將這個整數分別以 八進位制,十進位制,十六進位制輸出; 同時輸入一個布林值並且以 布林值的方式打印出來 注意:執行的時候需要按 ctrl鍵+F5 如果想只按F5就執行,在return 0;前面加一段程式碼: system("pause"); 同時需要

# 從鍵盤輸入一個整數用2的冪次方的形式輸出約定冪次方用括號來表示表示2(b),b=1時冪省略例如139=2^7+2^3+2^1+2^02(7)+2(3)+2+2(0)

樣例輸入: 402 樣例輸出: 2(8)+2(7)+2(4)+2 要求:冪不能重複,如:139=26+26+23+21+20(出現了2個6次方) 參考 C 程式碼: #include<stdio.h> #include<stdlib.h>

【每日試題】給定一個字串求出其最長的重複子串

題目:給定一個字串,求出其最長的重複子串 如字串abcdabcabcd,求的最長重複子串為abcd 程式碼: void LongChar(char* str) {  if(str==NULL)   return;  int max=0;  int first=0;  int

Java輸入一個十進位制如何轉換二進位制

方法一:利用Java API直接轉換 十進位制數如何轉換為二進位制數,這在Java API 中有一個方法,Integer.toBinaryString( ) 括號裡面寫上你要轉換的十進位制數,這樣可以直接轉換。例如: public static void

試題】實現一個要求Push入棧Pop出棧Min返回最小值的操作的時間複雜度O1

問題描述:實現一個棧,要求Push(入棧),Pop(出棧),Min(返回最小值的操作)的時間複雜度為O(1)  分析問題:要記錄從當前棧頂到棧底元素的最小值,很容易想到用一個變數,每push一個元素更新一次變數的值。那麼問題來了,當執行pop操作時,上一次的最小值就找不到

輸入一個十進位制整數轉換n

 #include<stdio.h> #define  N  20 int main() { int a,n,c,k,i; char str[N]; printf("輸入要轉換的數a\n"); scanf("%d",&a); printf("輸入要轉換為的進位制n\n"); scanf("

Java演算法總結輸入一個整數求該整數的二進位制表示有多少個1

    求一個整數的二進位制中1的個數。      題目:輸入一個整數,求該整數的二進位制表達中有多少個1。例如輸入10,由於其二進位制表示為1010,有兩個1,因此輸出2。      分析:這是一道很基本的考查位運算的面試題。包括微軟在內的很多公司都曾採用過這道題。