首页 > 学院 > 开发设计 > 正文

【九度OJ】题目1118:数制转换 解题报告

2019-11-06 06:42:53
字体:
来源:转载
供稿:网友

【九度OJ】题目1118:数制转换 解题报告

标签(空格分隔): 九度OJ


原题地址:http://ac.jobdu.com/PRoblem.php?pid=1118

题目描述:

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。 不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。

输入:

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。 数据可能存在包含前导零的情况。

输出:

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,…,9,A,B,…,F)。

样例输入:

15 Aab3 7

样例输出:

210306

Ways

每次都会因为一些细节出错,本题中,注意判断法按时都是以带有等号的,最后输出时别忘了加上0的ASCii,最后,注意数组是char,应该以%c形式输出。

进制之间的转换,首先转换成10进制,再转换成任意进制。转换成10进制的时候,注意,对于A-Z的表示的数字的转换,使用ASCII码的形式转换。

另外在转换过程中,一定要注意数字的正序和倒序等等问题,防止出错。

另外发现java的版本很方便啊,以后数制转换就用Java了哈哈哈。

#include <stdio.h>#include <string.h>int main() { int a, b; char n[20]; while (scanf("%d%s%d", &a, n, &b) != EOF) { //任意进制转10进制 int len = strlen(n); int trans = 0; for (int i = 0; i < len; i++) { int x = 0; if (n[i] >= '0' && n[i] <= '9') {//都有等于号 x = n[i] - '0'; } else if (n[i] >= 'a' && n[i] <= 'z') { x = 10 + n[i] - 'a'; } else if (n[i] >= 'A' && n[i] <= 'Z') { x = 10 + n[i] - 'A'; } trans = a * trans + x; } //下面10进制转成任意进制 int temp = trans; char ans[20]; int size = 0; do { int end = temp % b; ans[size++] = (end >= 10) ? (end - 10 + 'A') : (end + '0'); //加上0的ASCII temp /= b; } while (temp > 0); for (int i = size - 1; i >= 0; i--) { printf("%c", ans[i]);//以字符形式输出,不是整数 } printf("/n"); } return 0;}

写了个通用的change函数,利用BigInteger类可以轻松的实现数制转换。,就是BigeIteger.toString(to)方法。

这个题目中因为要求最终结果是大写字母,所以使用了toUpperCase(),否则默认的是小写字母。

import java.util.*;import java.math.*;public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String line = scanner.nextLine(); String[] params = line.split(" "); System.out.println(change(params[1], Integer.parseInt(params[0]), Integer.parseInt(params[2]))); } } //num 要转换的数 from源数的进制 to要转换成的进制 private static String change(String num, int from, int to) { return new BigInteger(num, from).toString(to).toUpperCase(); }}

Date

2017 年 3 月 6 日


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表