进制转换问题求解
2012-10-07 11:18
232 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> /** * 总体思想:采用一个数组存放基数"0123456789ABCDEF" * 即数字的每一位由上述数组的元素组成 * 如一个数表示为"15F",则该数字实际为:1 5 15 * 这样的话处理进制转换问题就和大整数运算问题一样了。 */ //将数字转换为字符串形式 int N2Str(int value,int N,char *str) { char temp[10],*Bits="0123456789ABCDEF"; int Len; if(value<0||N<2||N>16||str==NULL) return 0; if(value>=N) {//递归按位转换 if(!N2Str(value/N,N,str)) return 0; } Len=strlen(str); str[Len]=Bits[value%N]; str[Len+1]='\0'; return 1; } //M进制转换为N进制 int M2N(int M,char *MStr,int N,char *NStr) { int value=0,bit; if(M<2||M>16||MStr==NULL||N<2||N>16||NStr==NULL) return 0; while(*MStr) {//该过程类似于大整数运算的运算进位减位问题 value*=M; if(*MStr>='0'&&*MStr<='9') bit=*MStr-'0'; else if(*MStr>='a'&&*MStr<='f') bit=*MStr-'a'+10; else if(*MStr>='A'&&*MStr<='F') bit=*MStr-'A'+10; if(bit>=M) return 0; value+=bit; MStr++; } *NStr='\0'; N2Str(value,N,NStr); return 1; } int main(void) { char *in="123456"; char out[50]; if(M2N(8,in,16,out)) printf("%s->%s\n",in,out); else printf("illegal input data\n"); system("pause"); return 0; }
相关文章推荐
- 动态规划求解01背包问题初探(C版)
- 具有特殊局部性质的一个3SAT问题实例的线性时间复杂度的分治求解
- 一个Service问题的求解历程
- 三分法求解问题
- 罗比问题求解步骤
- 关于存储过程问题(高分求解,分不够可以再给)
- 复杂或有趣的MDX问题求解(1)-多个相关列参与求加权平均值
- SVM入门(四)线性分类器的求解——问题的描述Part1
- 迭代求解最优化问题——步长确定
- 回溯法求解全排列问题(可去除重复排列)
- 用C语言实现“百鸡问题”的求解
- 贪心法求解多处理器问题
- 栈求解迷宫问题
- 杭电acm1028利用母函数求解数字拆分问题
- 最长递增子序列问题的求解2
- 算法框架与问题求解
- 最长递增子序列问题的求解
- 动态规划问题分析求解
- 求解,android中listview的items同时添加edittext和checkbox的问题
- 【问题求解】Kubuntu 9.10安装VMware-tools失败。