将十进制整数转换成b进制字符串 (递归和非递归实现)
2014-05-21 17:24
260 查看
将十进制整数n转换成b进制后,再转化成字符串到s
即实现IntToString(int n , char* s, int b)函数。
这里用两种方式实现它:递归 和 非递归,下面为c++源代码。
即实现IntToString(int n , char* s, int b)函数。
这里用两种方式实现它:递归 和 非递归,下面为c++源代码。
#include <iostream> #include <string.h> using namespace std; //递归实现intToString /* *函数功能:将十进制整数n转换成b进制后,再转化成字符串到s *函数参数:n 表示十进制整数,可正可负 * s 表示存取的字符串 * b 表示进制数 */ void intToString_Recursion(__int64 n, char* s, int b) { //下面这条语句静态变量 i 表示字符数组的下标 //当n >= 0 时,需做两件事:1 、不管n是不是0,令s = "0" (注意在字符串后加'\0') // 2 、i = 0,表示s从下标 0 开始保存各位数的信息 //当n < 0 时,要做三件事: 1 、第一位存符号位 '-'; // 2 、n 取绝对值; // 3 、i = 1, 表示s从下标 1 开始保存各位数的信息 static int i = (n >= 0 ? (s[0] = '0', s[1] = '\0' ,0) : (s[0] = '-', n = -n, 1) ); static char bChar[16] = //记录十六进制字符的信息(其实可以超过十六进制,只需在后面加字符) {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; if(n != 0) { intToString_Recursion(n/b, s , b); //第一次除运算为最后一位结果,压如栈底 s[i++] = bChar[n%b]; //从栈内读取字符 s[i] = '\0'; //为了保证字符串结束带有'\0',不惜时间代价在每次添加字符的后面加上'\0',可以被覆盖 } } //非递归实现intToString /* *函数功能:将十进制整数n转换成b进制后,再转化成字符串s *函数参数:n 表示十进制整数,可正可负 * s 表示存取的字符串 * b 表示进制数 */ void intToString_NonRecursion(__int64 n, char* s, int b) { static char bChar[16] = //记录十六进制字符的信息(其实可以超过十六进制,只需在后面加字符) {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int i = 0; if(0 == n) { //n = 0: s[0] = '0'; //令s = "0" s[1] = '\0'; return; //直接返回 } else if(n < 0) { //n < 0: , s[0] = '-'; //给第一位赋值符号位'-' n = -n; //取反 i = 1; //令i = 1,表示从i开始保存数字 } while(0 != n) { //逆序记录b进制数字 s[i++] = bChar[n%b]; n = n / b; } s[i] = '\0'; int high = strlen(s) - 1; int low = s[0] == '-' ? 1 : 0; //跳过'-' while(low < high) { //将字符串逆序 char t = s[low]; s[low] = s[high]; s[high] = t; low++; high--; } } int main() { char s[50]; char s1[50]; intToString_Recursion(-12345678999999, s , 2); //递归函数测试 intToString_NonRecursion(-12345678999999, s1, 2);//非递归函数测试 cout<<s<<endl; cout<<s1<<endl; return 0; }
相关文章推荐
- 把十进制整数转换为r(r=2)进制输出(顺序栈实现)
- 十六进制字符串转换成十进制整数的C++实现源代码
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- 用递归实现 整数数字转换为对应的 字符串
- 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, 然后打印出这个十进制整数对应的二进制形式。
- 递归实现十进制到2(其他)进制的转换
- 将一个整数N转换成字符串!(递归和非递归、及——进制转化)
- C++实现十六进制字符串转换为十进制整数的方法
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- 12、JAVA 递归实现十进制到N进制的转换--未考虑负数
- 将十进制的转换为1~16(递归输出)或是1~32(字符串数组输出)进制
- 利用栈实现把十进制整数转换为二至十六之间的任一进制数的功能
- (1411)实现字符串与整数的相互转换(不使用itoa和atoi)
- ORACLE中用一条SQL实现其它进制到十进制的转换(转)
- 巧用一条SQL 实现其它进制到十进制转换
- 任意进制转换的递归实现
- 输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)
- RACLE中用一条SQL实现其它进制到十进制的转换
- 用递归的方式实现各种进制间的转换
- 巧用一条SQL语句实现其它进制到十进制转换