zoukankan      html  css  js  c++  java
  • 进制转换问题求解

    #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;
    }
  • 相关阅读:
    C语言中scanf函数的实现
    Express中设置cookie,session,token
    ajax2.0提供的FormData
    将json字符串解析为对象的三种方式
    ajax中的跨域问题
    html5中的图片预览
    jQuery中的ajax
    jQuery中的表单序列化
    实现一个瀑布流
    ajax
  • 原文地址:https://www.cnblogs.com/hanxi/p/2713636.html
Copyright © 2011-2022 走看看