编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数,保存到s中。

   对于转换的进制b,如果小于10,可通过n模b再加上'0',即为最后一位数,将其保存在数组str[]中,通过n/b依次得到其他数字。如果为十六位进制,需要再定义一个数组p,p为"0123456789ABCDEF",再将n模b的值保存在数组str[]中,通过n/b依次得到其他数字。最后逆置整个数组就可以得到转换后的数。

代码如下:

#include<stdio.h>
#include<stdlib.h>

void reverse(char str[],int len)//逆序整个字符数组
{
	int left=0;
	int right=len-1;
	while(left<right)
	{
		char temp=str[left];
		str[left]=str[right];
		str[right]=temp;
		left++;
		right--;
	}
}

void itob(int num, char str[],int b)
{
    int i=0;	
    while(num)
    {
		if(b<10)//b进制
		{
			str[i]=num%b+'0';//数字逆序存入字符数组中
	                num/=b;
		}
		else if(b==16)
		{
			char *p="0123456789ABCDEF";
			str[i]=p[num%b];//p[num%b]等价于*(p+(num%b))
			//上面两个语句可写为str[i]="0123456789ABCDE"[num%b];
			num/=b;
		}
		else break;
		i++;
	}
    str[i]='\0';
	reverse(str,i);
}

int main()
{ 
	char str[32];
	int num,b;
	printf("请输入正数和转化的进制>\n");
        scanf("%d%d",&num,&b);
	itob(num,str,b);
	printf("%s\n",str);
    system("pause");
    return 0;
}