当前位置:首页 > 题解目录 > 正文内容

【题解】转换的问题

亿万年的星光5年前 (2021-04-23)题解目录2257

【题目描述】

那么,问题来了:

输入一个十进制数N,将它转换成R进制数输出。

【输入描述】

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。

【输出描述】

为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)

【样例输入】

7 2
23 12
-4 3

【样例输出】

111
1B
-11

【题目分析】

  • 比较经典的进制转换

  • 考虑使用递归的方式实现



【参考代码1】——简单递归实现

#include<iostream>
using namespace std;
void calculate(int n,int k)
{
    char num[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    int temp;
    temp=n%k;
    n/=k;
    if(n!=0)//判断是否到达边界n=0
        calculate(n,k); 
    cout<<num[temp];
}
 
int main()
{
    int x,m;
    cin>>x>>m;//输入十进制数x与要转换成的进制m
    calculate(x,m);//调用函数进行转换
    cout<<endl;
    return 0;
}


【参考代码2】——使用全局变量保存(没有考虑负数)

#include<iostream>
#include<cstring>

using namespace std;
char num[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char ans[100]; //结果数组 
int p=0;
void calculate(int n,int k)
{
    int temp;
    temp=n%k;
    n/=k;
    if(n!=0)//判断是否到达边界n=0
        calculate(n,k); 
 	ans[p]=num[temp];
 	p++;
}
 
int main()
{
    int x,m;
    while(cin>>x>>m)
	{
		calculate(x,m);//调用函数进行转换
		//输出 
		int len=strlen(ans);
		for(int i=0;i<len;i++)
		{
			cout<<ans[i];	
		} 
		cout<<endl;
		//初始化数据
		p=0; 
		memset(ans, 0, sizeof(ans)); 
	}
    cout<<endl;
    return 0;
}

【参考代码3】——考虑负数问题

#include<iostream>
#include<cstring>

using namespace std;
char num[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char ans[100]; //结果数组 
int p=0;
void calculate(int n,int k)
{
    int temp;
    temp=n%k;
    n/=k;
    if(n!=0)//判断是否到达边界n=0
        calculate(n,k); 
 	ans[p]=num[temp];
 	p++;
}
 
int main()
{
    int x,m;
    while(cin>>x>>m)
	{	
		int flag=0; 
		if(x<0)
		{
			flag=1;
			x=-x;
		} 
		calculate(x,m);//调用函数进行转换
		//输出 
		int len=strlen(ans);
		if(flag) //判断负数情况 
			cout<<"-";
		for(int i=0;i<len;i++)
		{
			cout<<ans[i];	
		} 
		cout<<endl;
		//初始化数据
		p=0; 
		memset(ans, 0, sizeof(ans)); 
	}
    cout<<endl;
    return 0;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【题解】导弹拦截

    【题目描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导...

    2021年市南区程序设计竞赛(小学组)

    1.建设病房(build.cpp)【题目描述】2020年1月23日下午,武汉市建设局紧急召集中建三局等单位举行专题会议,要求参照2003年抗击非典期间北京小汤山医院模式,在武汉职工疗养院建设火神山医院...

    【算法】最少步数

    【算法】最少步数

    【题目描述】在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知...

    【题解】大数取模

    【题目描述】求m%n。【输入描述】两个数,m和n。【输出描述】m模n的值。【样例输入】3【样例输出】2【数据范围】对于30%的数据, 1<m<10^18对于70%的数据, m>10^...

    【题解】演讲大赛评分

    【题目描述】最近"老王"很开心.他在大一的时候参加过数计学院的“软件小组”。告诉你个秘密,这个小组是个好地方,不但活动精彩而且有MM。 这不,这个小组举办了一个叫做“计算...

    分数求和

    题目描述】输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。如: 5/6  、 10/3  均是最简形...