题目:
编写一个函数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; }
本文出自 “无心的执着” 博客,谢绝转载!
原文地址:http://10740590.blog.51cto.com/10730590/1707913