进制转换之十进制转十六进制(C/C++/Java补充博客)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38603541/article/details/86610778

(1)C/C++实现 

1>基础方法:当然就是常规方法了,一步一步实现,这种方法是最简单最容易想到的但是实现过程是比较麻烦,逻辑行比较强的。先来解释一下我的程序:首先小编将十六进制所表示的数存在了一个字符数组里,共后续程序中计算的结果匹配使用。然后是输入,输入之后要判断输入的十进制数是否在0~15之间,在这之间呢,直接让输入的这个十进制数求余16然后匹配字符数组即可;另一种情况就是这个数比较大,不在0~15之间,那这种情况该怎么办呢?首先我需要把这个十进制数求余16的数字分离出来,然后去数组里面匹配相应的数组,最后输出字符串即可。

#include<iostream>
using namespace std;
int main(){
	int a;
	int b[100];
	char c[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 
	
	cin >> a;
	
	if(a >= 0 && a < 16){
		int m = a % 16;
		for(int i = 0;i < 16;i++){
			if(m == i){
				cout << c[i];
			}
		}
	}
	else{
		int i = 0;
		while(a != 0){
			b[i] = a % 16;
			a = a / 16;
			i++;
		}
		for(int j = i - 1;j >= 0;j--){
			if(b[j] == 10)
				cout << "A";
			else if(b[j] == 11)
				cout << "B";
			else if(b[j] == 12)
				cout << "C";
			else if(b[j] == 13)
				cout << "D";
			else if(b[j] == 14)
				cout << "E";
			else if(b[j] == 15)
				cout << "F";
			else
				cout << b[j];  
		}
	}
	
	return 0;
}

2>格式化转换方法:

C语言实现:在C语言中%d,%o,%x分别表示十进制数,八进制数,十六进制数。%X表示输出字母为大写的十六进制数。

#include<stdio.h>
int main(){
	int n;
	
	scanf("%d",&n); 
	
	printf("%X",n);
	
	return 0;
} 

C++语言实现:在C++语言中hex,oct,dec分别表示十六进制数,八进制数和十进制数,具体方法如下:

#include<iostream>
#include<iomanip> //大写输出必须包含该头文件
using namespace std;
int main(){
	int n;
	
	cin >> n;
	
	cout << setiosflags(ios::uppercase) << hex << n << endl; //以十六进制大写输出
	
	return 0;
} 

文章看到现在是不是觉得还是C/C++的格式化输出更简单一些的,对的,没错!真的!血的教训,能用C/C++自带方法的一定要用C/C++自带的,简单。

(2)Java语言实现

Java语言实现十进制转十六进制的方法在这里我就不使用基本方法了,直接演示格式化转换方法:

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int a = scanner.nextInt();
		
		System.out.println(Integer.toHexString(a).toUpperCase());
		
		scanner.close();
	}
}

Java的进制转换所用到的方法我会在我的下一篇博客中详细写。先来解释一下代码:

Integer.toHexString(a)  十进制转换十六进制的方法,包含在Integer方法下
toUpperCase()  以大写方法输出

OK!现在就大功告成了,C/C++/Java十进制数转换十六进制数。

猜你喜欢

转载自blog.csdn.net/qq_38603541/article/details/86610778