基础练习 十六进制转十进制(ACMORE1565)

基础练习 十六进制转十进制(ACMORE1565)

题目

Description
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
Input
十六进制数字符串
Output
十进制数
Sample Input
FFFF
Sample Output
65535
Source
蓝桥杯
题目链接: https://acmore.cc/problem/LOCAL/1565

简析

用c语言写的话用for循环一下,每个位乘权值,加起来即可。
用Java写的话,有现成的方法呀

这里顺便说一下java中10进制与16进制的互换:
1、10进制转16进制

  int dec = 123;
  String hex = Integer.toHexString(dec);

2、16进制转10进制

  String hex = "FFFF";
  Integer dec = Integer.parseInt(hex, 16);

  但是,可能会超出长度限制,所以我们用Java中的BigInteger来处理:

  String hex = "FFFF";
  BigInteger dec = new BigInteger(hex, 16);

AC的代码

Python版

print(int(input(),16))

Java版

import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(new BufferedInputStream(System.in));
		String s = scanner.nextLine();
		BigInteger n = new BigInteger(s, 16);
		System.out.println(n);
	}
}

C版
(可以利用ASCII码优化代码长度)

#include <stdio.h>
#include <string.h>
char six[9];
int  main(void)
{
  int n, t;
  int i, j, k;
  long long ten = 0;
  long long sixn = 1;
  int lensix;
    gets(six);
    lensix = strlen(six);
    for(i = lensix-1; i >= 0; i--){
      if(six[i] == '0')
        ten += 0*sixn;
      else if(six[i] == '1')
        ten += 1*sixn;
      else if(six[i] == '2')
        ten += 2*sixn;
      else if(six[i] == '3')
        ten += 3*sixn;
      else if(six[i] == '4')
        ten += 4*sixn;
      else if(six[i] == '5')
        ten += 5*sixn;
      else if(six[i] == '6')
        ten += 6*sixn;
      else if(six[i] == '7')
        ten += 7*sixn;
      else if(six[i] == '8')
        ten += 8*sixn;
      else if(six[i] == '9')
        ten += 9*sixn;
      else if(six[i] == 'A')
        ten += 10*sixn;
      else if(six[i] == 'B')
        ten += 11*sixn;
      else if(six[i] == 'C')
        ten += 12*sixn;
      else if(six[i] == 'D')
        ten += 13*sixn;
      else if(six[i] == 'E')
        ten += 14*sixn;
      else if(six[i] == 'F')
        ten += 15*sixn;
      sixn *= 16;
    }
    printf("%lld\n", ten);
  return 0;
}
    原文作者:进制转换
    原文地址: https://blog.csdn.net/y_universe/article/details/86650478
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞