栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

F 进 制 转 换

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

F 进 制 转 换

时间限制:1000ms   内存限制:65536kb

通过率:412/451 (91.35%)    正确率:412/1131 (36.43%)

题目描述

给定一个 nn 进制数 aa,请你将它转换为 mm 进制并输出。

特别的,令 A,B,C,…,ZA,B,C,…,Z 表示高进制下的 10∼3510∼35。

例如,对于 1616 进制下的数 5A5A,它表示十进制下的 9090。

输入

一行,先输入一个字符串 aa,表示需要进制转换的 nn 进制数。再输入两个空格隔开的整数 n,mn,m,含义见上。

输出

输出一行一个字符串,表示 nn 进制下的数 aa 在 mm 进制下是多少。

输入样例1
8 10 2
输出样例1
1000
输入样例2
2HB4QH81T5O 35 13
输出样例2
199510435A68577
HINT

假设数 aa 对应十进制下的数 bb,保证 b≤1018b≤1018。

如果你不知道如何输入,那么可以参照如下输入方式:

char ch[100];
int n,m;
scanf("%s%d%d",ch,&n,&m);
int len=strlen(ch);

其中,输入的字符串存在 ch 数组的第 0 位到第 len-1 位。

如果要使用上述代码,请添加头文件string.h,即在程序开头添加#include

Author : yzh

#include 
#include 
#include
//——————————将N进制转化为M进制————————————
char ch[100];
char putout[100];
int main()
{
	//——————————————准备————————————
	int n, m, len, i, j = 1;
	unsigned long long n_10 = 0, N, M;
	scanf("%s%d%d", ch, &n, &m);
	len = strlen(ch);
	N = n;
	M = m;
	//——————————将N进制转化成10进制————————————
	for (i = len-1; i >= 0; i--)
	{
		if (ch[i] > 48 && ch[i] <= 57)
		{
			n_10 += (ch[i] - '0') * N / n;
			N *= n;
		}
		else if (ch[i] == 48)
			N *= n;
		else
		{
			n_10 += (ch[i] - 'A' + 10) * N / n;
			N *= n;
		}
	}
	//——————————将10进制转化为M进制————————————
	i = 1;
	while (n_10)
	{
		if (n_10 % M >= 10)
		{
			putout[i] = 'A' + (n_10 % M) - 10;
		}
		else
		{
			putout[i] = '0' + (n_10 % M);
		}
		n_10 /= M;
		i++;
	}
	i -= 1;
	while (i)
	{
		printf("%c", putout[i]);
		i--;
	}
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312018.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号