洛谷 进制转换 打卡

洛谷 P1143 进制转换题目描述
请你编一程序实现两种不同进制之间的数据转换。

输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)n(2≤n≤16),第二行是一个n进制数,若n>10n>10则用大写字母A-FA−F表示数码10-1510−15,并且该nn进制数对应的十进制的值不超过10000000001000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)m(2≤m≤16)。

输出格式
一个正整数,表示转换之后的m进制数。
输入输出样例
输入 #1
16
FF
2

输出 #1
11111111

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		long n, m, x = 1, nn = 0;
		n = sc.nextInt();
		String s = sc.next(), res = "";
		m = sc.nextInt();
		//先将数转为10进制
		for (int i = s.length() - 1; i >= 0; i--) {
			// 每一位的数乘以当前位对应的权值,再累加
			nn += ito(s.charAt(i)) * x;
			x *= n;
		}
		while (nn != 0) {
			res = oti(nn % m) + res;
			nn /= m;
		}

		System.out.println(res);

	}

	static int ito(char a) {
		if (a == 'A') {
			return 10;
		}
		if (a == 'B') {
			return 11;
		}
		if (a == 'C') {
			return 12;
		}
		if (a == 'D') {
			return 13;
		}
		if (a == 'E') {
			return 14;
		}
		if (a == 'F') {
			return 15;
		}

		return (int) (a - '0');
	}

	static char oti(long a) {
		if (a == 15) {
			return 'F';
		}
		if (a == 14) {
			return 'E';
		}
		if (a == 13) {
			return 'D';
		}
		if (a == 12) {
			return 'C';
		}
		if (a == 11) {
			return 'B';
		}
		if (a == 10) {
			return 'A';
		}
		return (char) (a + '0');
	}

}

猜你喜欢

转载自blog.csdn.net/qq_43688587/article/details/111673426
今日推荐