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

【题解】转换的问题

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

【题目描述】

那么,问题来了:

输入一个十进制数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.阶乘问题(fac.cpp)【题目描述】给定一个正整数n,求出一个最小的整数m并使得m!的末尾连续的0的个数小于n。m!=1*2*3*4*...*m【输入描述】第一行n。【输出描述】一个整数m。【样...

【题解】计算天数

【题目描述】以 年-月-日 的形式给定一个日期,计算给定的日期是当年第几天。注意闰年二月有29天。【输入描述】输入格式为 yyyy-mm-dd,其中yyyy 表...

【题解】移动路线

【题目描述】X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一...

【题解】网线主管

【题目描述】仙境的居民们决定举办一场程序设计区域赛。裁判委员会完全由自愿组成,他们承诺要组织一次史上最公正的比赛。他们决定将选手的电脑用星形拓扑结构连接在一起,即将它们全部连到一个单一的中心服务器。为...

亲和数

【题目描述】自然数a的因子是指能整除a的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数” 。求最小的一对亲...

【题解】加密(2019青岛市程序设计竞赛)

【问题描述】文件加密最简单的方法是把文件的原文中的每个字母用另一个字母来代替。假设原文中只包括26个英文字母(有大写和小写),没有其他符号,且长度不超过100,加密规则如下:原文abcdefghijk...