编写一个函数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; }