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

【题解】转换的问题

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

【题目描述】

那么,问题来了:

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


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

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

分享给朋友:

相关文章

【题解】解密

【题解】解密

【题目描述】给定一个正整数k,有k次询问,每次给定三个正整数ni,ei,di,求两个正整数pi,qi。使ni=pi *  qi,  ei * di =(pi -1) *(qi-1)...

进制转换(1)

【题目描述】毛毛是个健忘的孩子,编程课上老师刚讲过进制转换的问题,她又忘了。请你帮他编写一个程序,完成一个浮点数与二进制之间的相互转换【输入描述】两个数字,第一个数字表示要转换的数字,浮点型。第二个是...

【题解】01串

【题目描述】Fans是个ACM程序设计迷。有时侯,他表现出很强烈的逆反心理,你往东,他往西,你往南,他偏往北。这一次,不知道又是谁惹着他了,好端端的一个个01串,到了他的手里,都变成10串了。请你编个...

【题解】凯撒密码

【题目描述】恺撒生活在充满危险和阴谋的时代. 恺撒面对的最困难的问题是生存. 为了生存, 他决定创造一种密码. 这种密码听起来难以置信, 如果不知道方法, 没有人可以破解.你是恺撒军队的一个上尉. 你...

【题解】循环比赛日程表

【题目描述】设有N个选手进行循环比赛,其中 N=2^M ,要求每名选手要与其他的N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。【输入描述】输入M【输出描述】一...

【题解】最大数问题

【题目描述】输入若干个整数。输出其中的最大数【输入描述】若干个整数。【输出描述】其中的最大数。【样例输入】1 2 5 7 8 6 1&nbs...