国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【九度OJ】題目1118:數(shù)制轉(zhuǎn)換 解題報(bào)告

2019-11-06 06:42:53
字體:
供稿:網(wǎng)友

【九度OJ】題目1118:數(shù)制轉(zhuǎn)換 解題報(bào)告

標(biāo)簽(空格分隔): 九度OJ


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

題目描述:

求任意兩個(gè)不同進(jìn)制非負(fù)整數(shù)的轉(zhuǎn)換(2進(jìn)制~16進(jìn)制),所給整數(shù)在long所能表達(dá)的范圍之內(nèi)。 不同進(jìn)制的表示符號(hào)為(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F(xiàn))。

輸入:

輸入只有一行,包含三個(gè)整數(shù)a,n,b。a表示其后的n 是a進(jìn)制整數(shù),b表示欲將a進(jìn)制整數(shù)n轉(zhuǎn)換成b進(jìn)制整數(shù)。a,b是十進(jìn)制整數(shù),2 =< a,b <= 16。 數(shù)據(jù)可能存在包含前導(dǎo)零的情況。

輸出:

可能有多組測(cè)試數(shù)據(jù),對(duì)于每組數(shù)據(jù),輸出包含一行,該行有一個(gè)整數(shù)為轉(zhuǎn)換后的b進(jìn)制數(shù)。輸出時(shí)字母符號(hào)全部用大寫表示,即(0,1,…,9,A,B,…,F(xiàn))。

樣例輸入:

15 Aab3 7

樣例輸出:

210306

Ways

每次都會(huì)因?yàn)橐恍┘?xì)節(jié)出錯(cuò),本題中,注意判斷法按時(shí)都是以帶有等號(hào)的,最后輸出時(shí)別忘了加上0的ASCii,最后,注意數(shù)組是char,應(yīng)該以%c形式輸出。

進(jìn)制之間的轉(zhuǎn)換,首先轉(zhuǎn)換成10進(jìn)制,再轉(zhuǎn)換成任意進(jìn)制。轉(zhuǎn)換成10進(jìn)制的時(shí)候,注意,對(duì)于A-Z的表示的數(shù)字的轉(zhuǎn)換,使用ASCII碼的形式轉(zhuǎn)換。

另外在轉(zhuǎn)換過程中,一定要注意數(shù)字的正序和倒序等等問題,防止出錯(cuò)。

另外發(fā)現(xiàn)java的版本很方便啊,以后數(shù)制轉(zhuǎn)換就用Java了哈哈哈。

#include <stdio.h>#include <string.h>int main() { int a, b; char n[20]; while (scanf("%d%s%d", &a, n, &b) != EOF) { //任意進(jìn)制轉(zhuǎn)10進(jìn)制 int len = strlen(n); int trans = 0; for (int i = 0; i < len; i++) { int x = 0; if (n[i] >= '0' && n[i] <= '9') {//都有等于號(hào) 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進(jìn)制轉(zhuǎn)成任意進(jìn)制 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]);//以字符形式輸出,不是整數(shù) } printf("/n"); } return 0;}

寫了個(gè)通用的change函數(shù),利用BigInteger類可以輕松的實(shí)現(xiàn)數(shù)制轉(zhuǎn)換。,就是BigeIteger.toString(to)方法。

這個(gè)題目中因?yàn)橐笞罱K結(jié)果是大寫字母,所以使用了toUpperCase(),否則默認(rèn)的是小寫字母。

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 要轉(zhuǎn)換的數(shù) from源數(shù)的進(jìn)制 to要轉(zhuǎn)換成的進(jìn)制 private static String change(String num, int from, int to) { return new BigInteger(num, from).toString(to).toUpperCase(); }}

Date

2017 年 3 月 6 日


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柳河县| 新民市| 新邵县| 新宁县| 新兴县| 岐山县| 中江县| 星子县| 清远市| 合水县| 渑池县| 临高县| 惠水县| 镇雄县| 潼南县| 璧山县| 临朐县| 金华市| 杭锦后旗| 洛南县| 衡山县| 榆社县| 阳东县| 孝昌县| 安图县| 常德市| 宜城市| 乐山市| 滨海县| 奉化市| 营口市| 子长县| 岚皋县| 平邑县| 乌兰察布市| 周至县| 介休市| 色达县| 白朗县| 灵武市| 台前县|