- 将一个十进制n(0<n<10^9)转换为r(1<r<17)进制数输出
具体的思路还是采用"除r取余" ,将得到的余数转换为字符,最后将字符串逆置。
#include<stdio.h>
// 将字符串翻转得到正确的进制转换数
void strrev(char result[], int len)
{
char *p=result, *q=result+len-1;
while (p < q) {
int temp = *p;
*p = *q;
*q = temp;
p++;
q--;
}
}
//进制转换函数
void decimalToR1(int n,int r,char result[]){
int i=0;
while(n!=0){
int rem=n%r; //余数
if(rem<10){
result[i++]=rem+'0'; //转换为数字字符
}
else {
result[i++] = rem - 10 + 'A'; // 转换为大写字母字符
}
n=n/r;
}
result[i]='\0';//字符串最后结束符加上
strrev(result,i);
}
// 也可以这样来写 用字符数组取值引用,也就是一个字符串常量"0123456789ABCDEF"
void decimalToR2(int n,int r,char result[]){
int k=0,d;
while(n!=0){
d=n%r; //余数
result[k]="0123456789ABCDEF"[d];
k++;
n=n/r;
}
result[k]='\0'; //字符串结束符
strrev(result,k);
}
int main(){
int n=2019; //原数
int r=16; //转换进制
char result[100]; //存储数组
decimalToR1(n,r,result);
printf("%d in base %d is %s\n",n,r,result);
return 0;
}
iotl函数可以直接使用得到转换的数,使用如下
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,r;
char str[30];
scanf("%d%d",&n,&r);
itoa(n,str,r); //使用itoa函数
puts(str);
return 0;}