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);
}
}
聯(lián)系客服