package com.sjtu.design.excise; import java.util.Scanner; /** * @class 數(shù)制轉(zhuǎn)換類 * @author TangShuGuang */ public class NumConversion { /** * @category 除基倒取余法 * @describe 這是最符合我們平時(shí)的數(shù)學(xué)邏輯思維的,即輸入一個(gè)十進(jìn)制數(shù)n,每次用n除以2,把余數(shù)記下來,再用商去除以2... * 依次循環(huán),直到商為0結(jié)束,把余數(shù)倒著依次排列,就構(gòu)成了轉(zhuǎn)換后的二進(jìn)制數(shù)。那么,在實(shí)際實(shí)現(xiàn)中, * 可以用int的一個(gè)數(shù)來存儲(chǔ)最后的二進(jìn)制,每次求余后把余數(shù)存儲(chǔ)在int型數(shù)的低位,依次遞增。 * @param num */ public void binary(int num) { int t = 0; // 用來記錄位數(shù) int bin = 0; // 用來記錄最后的二進(jìn)制數(shù) int r = 0; // 用來存儲(chǔ)余數(shù) while (num != 0) { r = num % 2; num = num / 2; bin += r * Math.pow(10, t); t++; } System.out.println("二進(jìn)制值:" + bin); // int oct=Integer.parseInt(str,2); // System.out.println("二進(jìn)制值:" + Integer.toBinaryString(oct));//binary函數(shù) } /** * @category 除基倒取余法 * @describe 這是最符合我們平時(shí)的數(shù)學(xué)邏輯思維的,即輸入一個(gè)十進(jìn)制數(shù)n,每次用n除以8,把余數(shù)記下來,再用商去除以8... * 依次循環(huán),直到商為0結(jié)束,把余數(shù)倒著依次排列,就構(gòu)成了轉(zhuǎn)換后的八進(jìn)制數(shù)。那么,在實(shí)際實(shí)現(xiàn)中, * 可以用int的一個(gè)數(shù)來存儲(chǔ)最后的八進(jìn)制,每次求余后把余數(shù)存儲(chǔ)在int型數(shù)的低位,依次遞增。 * @param num */ public void octal(int num) { int t = 0; // 用來記錄位數(shù) int bin = 0; // 用來記錄最后的二進(jìn)制數(shù) int r = 0; // 用來存儲(chǔ)余數(shù) while (num != 0) { r = num % 8; num = num / 8; bin += r * Math.pow(10, t); t++; } System.out.println("八進(jìn)制值:" + bin); // int oct = Integer.parseInt(str, 2); // System.out.println("八進(jìn)制值:" + Integer.toOctalString(oct));//octal函數(shù) } /** * 問題描述 十六進(jìn)制數(shù)是在程序設(shè)計(jì)時(shí)經(jīng)常要使用到的一種整數(shù)的表示方式。 * 它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個(gè)符號(hào),分別表示十進(jìn)制數(shù)的0至15。 * 十六進(jìn)制的計(jì)數(shù)方法是滿16進(jìn)1,所以十進(jìn)制數(shù)16在十六進(jìn)制中是10,而十進(jìn)制的17在十六進(jìn)制中是11, * 以此類推,十進(jìn)制的30在十六進(jìn)制中是1E。給出一個(gè)非負(fù)整數(shù),將它表示成十六進(jìn)制的形式。 * * @param num */ public void hexadecimal(int num) { String s = ""; char c = ' '; if (num == 0) { s = "0"; } int m; while (num != 0) { m = num % 16; if (m / 10 == 1) c = (char) (65 + (m % 10)); else if (m / 10 == 0) c = (char) (48 + m); s = c + s; num = num / 16; } System.out.println("十六進(jìn)制值:" + s); // int oct = Integer.parseInt(str, 2); // System.out.println("十六進(jìn)制值:" + Integer.toHexString(oct));//hex函數(shù) } public void ds(int a) { if(a<0) { System.out.println("|"+a+"|的絕對(duì)值是:"+(-a)); }else { System.out.println("|"+a+"|的絕對(duì)值是:"+(-a)); } } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("請(qǐng)輸入十進(jìn)制值:"); String str = input.next(); int num = Integer.parseInt(str); NumConversion conv = new NumConversion(); conv.binary(num); conv.octal(num); conv.hexadecimal(num); //conv.ds(num); } } |
|