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

【题解】转换的问题

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

【题目描述】

那么,问题来了:

输入一个十进制数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;
}


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

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

分享给朋友:

相关文章

【题解】求次方和

【题目描述】    求解 (2^0 + 2^1 + 2^2+ ... + 2^n) % 2333【输入描述】    一行,一个整数n。【输出...

【题解】切比雪夫距离

【题目描述】小C有一个平面!它发现了平面上的两个点,请你求出求它们之间的切比雪夫距离。切比雪夫距离定义为x与y方向坐标差的绝对值较大值。【输入描述】四个整数,a,b,c,d。坐标为(a,b)与(c,d...

【题解】前缀最大值

【题目描述】求一个数列的所有前缀最大值之和。即:给出长度为n的数列a[i],求出对于所有1<=i<=n,max(a[1],a[2],...,a[i])的和。比如,有数列:666 304 6...

【题解】寻找祖先

【题解】寻找祖先

【题目描述】给出充足的父子关系,请你编写程序找到某个人的最早的祖先。规定每个人的名字都没有空格,且没有任意两个人的名字相同。最多可能有1000组父子关系,总人数最多可能达到50000人,家谱中的记载不...

【题解】会场安排

【题目描述】学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表...

猴子吃桃

【题目描述】猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第N天早上想再吃时...