初步实现无循环(则递归)将任意整数转任意进制字符串
2014-03-24 00:41
441 查看
不用循环的算法可以寻求递归来实现。
对于这个最大整数转为二进制时递归最深,64位64倍固定栈大小?。
itoa将num按radix进制转换字符串到rec_array缓冲区,其中缓冲区未检测。
对于这个最大整数转为二进制时递归最深,64位64倍固定栈大小?。
itoa将num按radix进制转换字符串到rec_array缓冲区,其中缓冲区未检测。
#include"stdio.h" #include"string.h" int trace_counter = 0; char *trace_array; char *rec_itoa(int num, char *rec_array, int radix); char *itoa(int num, char *array, int radix) { char *rec_array = array; trace_array = array; // trace if (num < 0) { num = -num; *array = '-'; rec_array++; trace_counter++; // trace } else if (num == 0) *array = 0 - '0'; rec_array = rec_itoa(num, rec_array, radix); *rec_array = 0; return array; } char *rec_itoa(int num, char *rec_array, int radix) { static char array_0_z[] = "0123456789abcdefghijklmnopqrstuvwxyz"; printf("trace num : %d. \n", num); if (num >= radix) { rec_array = rec_itoa(num / radix, rec_array, radix); num %= radix; } *rec_array = array_0_z[num]; printf("trace_%d: updata array[%d] = %c, now array = '%*s'\n", trace_counter, rec_array - trace_array, *rec_array, trace_counter + 1, trace_array); // trace; trace_counter++; // trace return ++rec_array; } // return buf+1 to change the pointer buf instead of moving it in a recursive char *rec(char **buf, int len); will change buf. // function. char *rec(char *buf, int len) { if (len) buf = rec(buf, len - 1); printf("rec %s\n", buf++); return buf; } void rec_to_change_buf_is_na(char *buf, int len) { // codes here are the same to the above but the last line; } int main() { char buf[100] = "++++++++"; printf("result: %s\n", itoa(244, buf, 2)); char rec_buf[] = "201308021926"; rec(rec_buf, strlen(rec_buf)); //char * p= "abcde"; //int a = (++p)++; //printf("a = %d\n", a); int *p[6], (*p2)[4]; int arr[6][4]; printf("\narr = %p, arr[0] = %p\n", arr,arr[0]); p[0] = arr[0]; p2 = arr; p2++; printf("p = %p, p2 = %p\n\n%d\n",p, p2, 2^3); } /* ouptput : trace num : 244. trace num : 122. trace num : 61. trace num : 30. trace num : 15. trace num : 7. trace num : 3. trace num : 1. trace_0: updata array[0] = 1, now array = '1+++++++' trace_1: updata array[1] = 1, now array = '11++++++' trace_2: updata array[2] = 1, now array = '111+++++' trace_3: updata array[3] = 1, now array = '1111++++' trace_4: updata array[4] = 0, now array = '11110+++' trace_5: updata array[5] = 1, now array = '111101++' trace_6: updata array[6] = 0, now array = '1111010+' trace_7: updata array[7] = 0, now array = '11110100' result: 11110100 rec 201308021926 rec 01308021926 rec 1308021926 rec 308021926 rec 08021926 rec 8021926 rec 021926 rec 21926 rec 1926 rec 926 rec 26 rec 6 rec
相关文章推荐
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- 2.写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- 将十进制整数转换成b进制字符串 (递归和非递归实现)
- 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- 4.2题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- c函数实现将一个整数转为任意进制的字符串输出
- 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- 简单LinuxC程序关于任意长整数相加(字符串实现)
- 递归实现10进制转8进制,字符串数字互转,判断数组正逆向
- 递归实现10进制转8进制,字符串数字互转,判断数组正逆向
- 递归 将一个十进制数转化为任意进制字符串
- 将一个整数N转换成字符串!(递归和非递归、及——进制转化)
- 定义一个List集合并实例化对应的实现类对象。循环输入任意个整数,输入0结束输入循环,对集合中的数据进行从大到小的排序后输出
- 整数转化为任意n进制的字符串
- 【java】整数逆序,递归实现和字符串切割实现。
- 用递归实现 整数数字转换为对应的 字符串