题目:
编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数,保存到s中。
题目分析:
对于这个问题,根据进制之间的转换特点,将十进制的整数n转换为其他进制,可以利用模除的方式将其转换,但是其中有一个问题:16进制数中表示0123456789abcdef,所以可以将16进制的转换另外解决。解决方式通过建立一个指针变量,通过指针进行解引用,同时建立一个数组用来存放转换后的数,然后进行数组元素的逆置。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void exchange( char arr[] ) //将数组中元素逆置
{
int left = 0;
int right = strlen(arr)-1; //strlen函数可以计算数组的大小
char tmp = 0;
while( left < right ) //借助变量交换数组元素
{
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
void itob(char arr[],int num,int b) //将整数n转换其他进制
{
int i=0;
while(num)
{
if(b<10) //转换为10以下进制
{
arr[i]=num%b+'0';
num /= b;
}
else if(b == 16) //转换为16进制
{
char *p = "0123456789abcdef"; //定义一个指针变量
arr[i] = p[ num % 16 ]; //相当于解引用*(p+(num%16))
num /= b;
}
else
{
break;
}
i++;
}
arr[i + 1] = '\0'; //添加字符串结束标志
exchange( arr );
}
int main ()
{
char s[10]={0};
int num=0;
scanf("%d",&num);
itob(s,num,2);
printf("%s",s);
system("pause");
return 0;
}
转载于:https://blog.51cto.com/10740590/1707913