,用c语言写出计算过程

img


(2B.38)16换成十进制怎么写,写出c语言的计算过程,救命怎么写啊,教教我

如果需要将十六进制的小数转为十进制的小数,可分别提取这个十六进制的整数部分和小数部分,然后分别将整数部分和小数部分转为十进制,最后输出十进制的整数部分和小数部分的和即可。

代码如下:

参考链接:
https://www.xiao84.com/tools/103105.html



#include  <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void){
    


    
    //    char numStr[25]= "2B.38";
    //获取输入的二进制小数 
    char numStr[25];
    printf("请输入二进制小数:");   
    scanf("%s",numStr);
    
    // http://c.biancheng.net/view/340.html
    // 获取小数部分 
    char * fractionalPart = strchr(numStr,'.');
        
    char   integerPart[25] ;
    // 获取整数部分 
    // https://blog.csdn.net/as480133937/article/details/120856299
    if (fractionalPart==NULL){
        strcpy(integerPart,numStr);
    }else{
        char *p;
        int i=0;
        for(p=numStr;p<fractionalPart;p++,i++){
            integerPart[i] = *p;
        }
        integerPart[i] ='\0';
    }
//    printf("整数部分为:%s\n",integerPart);
//    printf("小数部分为:%s\n",fractionalPart+1);
//
//    


     
    double  weight = 1;
    int integerSum=0;
    int single ;
    // 将整数部分转为十进制 
    for(int i=strlen(integerPart)-1;i>=0;i--){
        
        char ch = integerPart[i];
        // https://www.runoob.com/cprogramming/c-function-toupper.html
        ch = toupper(ch);  // 转为大写 
        
        if(ch>='0'&&ch<='9'){
            single = ch-'0';
        }else if(ch>'A'&&ch<='Z'){
            single = ch-'A'+10;
        }
        
        integerSum += single *weight;
        weight*=16;        
        
    }
//    printf("整数部分转为十进制为:%d\n",integerSum);
    
    weight = 1.0/16;
    double fractionalSum=0;
    // 将小数部分转为十进制 
    for(int i=1;fractionalPart!=NULL&&i<strlen(fractionalPart);i++){
        
        char ch = fractionalPart[i];
        // https://www.runoob.com/cprogramming/c-function-toupper.html
        ch = toupper(ch);  // 转为大写 
        
        if(ch>='0'&&ch<='9'){
            single = ch-'0';
        }else if(ch>'A'&&ch<='Z'){
            single = ch-'A'+10;
        }
        
        fractionalSum += single *weight;
        //printf("fractionalPart[%d]=%c, single=%d, weight=%f,single *weight=%f ,fractionalSum=%f\n ",
        //i,fractionalPart[i],single,weight,single*weight, fractionalSum);
        weight/=16;        
        
    }
//    printf("小数部分转为十进制为:%f\n",fractionalSum);
    

    double sum =  integerSum + fractionalSum;
    // 打印结果 
    // https://www.xiao84.com/tools/103105.html
    printf("%s转为十进制为:%f\n",numStr,sum);
    return 0;
    
} 


img