题目:输入一个十进制N,将他转化成R进制数输出在10<=R<=16的情况下,用‘A’表示10,用‘B’表示11,用‘C’表示12,用‘D’表示13,用‘E’表示14,用‘F’表示15.
输入格式
输入包含两个整数N(N<=10000)和(2<=R<=16)。
注意,N有可能是负整数。
输出格式
输出一行,表示转换后的数。
样例输入:
23
样例输出:
1B
代码如下:
#include<iostream>
using namespace std;
char arr[10000];
int main( )
{
int N,R;
int a;
cin>>N>>R;
if(N == 0)
cout<<0<<endl;
else{if(N < 0){
cout<<'-';
N = -N;
}
for( a = 0; N > 0; a++)
{
int yu;
yu = N % R;
if(yu > 9){
arr[a] = 'A' + yu -10;
}
else
arr[a]= '0'+ yu;
N /=R;
}
for(int b = a-1; b >= 0; b--){
cout<<arr[b];
}
}
return 0;
}
- 分析题目:
首先看到题目,第一反应可以直接调用库函数进行转换。第二种就是可以自己手写一个函数进行转换。
这里自己手写一个进制转换函数来解题。输入的N可以为0也可以为负数。那么这两种情况要优先考虑并且分开考虑。其次要根据ASCLL码表来确定每一个数的转化。
- 分析算法:
把余数存到定义好的数组中 ,然后反向依次输出。
for( a = 0; N > 0; a++)
{
int yu;
yu = N % R;
if(yu > 9){
arr[a] = 'A' + yu -10;
}
else
arr[a]= '0'+ yu;
N /=R;
}
- 注意事项1:
存储余数的数组应该定义为字符类型
char arr[10000];
- 注意事项2:
输入的数可以为负数 或 0 。所以应该单独区分出这两个类型。
if(N == 0)
cout<<0<<endl;
else{if(N < 0){
cout<<'-';
N = -N;}