【题解】转换的问题
【题目描述】
那么,问题来了:
输入一个十进制数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; }
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。