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

【题解】转换的问题

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

【题目描述】

那么,问题来了:

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


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

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

分享给朋友:

相关文章

【题解】BFS、DFS——走迷宫问题

【题目描述】给定一个 n×m的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,...

【题解】自动晾衣机

【题目描述】有一个环形可以晾衣服的衣架,有若干个夹子组成,它可以晾不同长度的衣服(占用多个夹子),并且每两件衣服中间要有一个空夹子作为空位,下面需要依次晾干几件长度不一的衣服,请你给出某个夹子的使用情...

植树节

【题目描述】植树节快要到了,学校要组织志愿者去给树苗浇水。有一排树苗,编号依次是 0,1,2, . . . 。现有 n个志愿者去给树苗浇水,第 i 个志愿者选定了一个区间[ai, bi],表示第 i个...

【题解】合唱队形

【题目描写】N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的KK位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T...

【题解】Crossing River

【题目描述】几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间。【输入描述】输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间。【输出描述】输出t行数据,每行1个...

【题解】母牛的故事

【题解】母牛的故事

【题目描述】有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?【输入描述】输入数据由多个测试实例组成,每个测试实例占一行...