鱼C论坛

 找回密码
 立即注册
查看: 2235|回复: 9

[已解决]十六进制转十进制问题

[复制链接]
发表于 2018-3-18 10:46:07 | 显示全部楼层 |阅读模式
10鱼币
为啥的出的结果比正确的结果少  3  呢,不求甚解
#include <stdio.h>
#include <math.h>
#include <string.h>

//输入十六进制数,转换成十进制

#define MAX 30

int hex(char array[]);        //进制转换 

int main(void)
{
        char number[MAX];        //存放合法的十六进制数字 
        
        printf("请输入一个十六进制数:");
        scanf("%s", number);        
                                
        printf("十六进制的 %s 转换成十进制为 %d \n", number, hex(number));
                
        
        
        getch();
        return 0;
}

int hex(char array[MAX])
{
        int i, j;                //循环变量
        int sum = 0;        //获取最终结果 
        int len;                //获取该数组的长度
        int  temp;                //获取每个字符的转换成十进制后的值 
        
        len = strlen(array);
        
        for(i = len, j = 0; i >= 0; i--, j++)
        {
                if(array[i] <= '9')
                {
                        temp = array[i] - '0';
                }
                else if(array[i] >= 'A' && array[i] <= 'Z')
                {
                        temp = array[i] - 'A' + 10;
                }
                else if(array[i] >= 'a' && array[i] <= 'z')
                {
                        temp = array[i] - 'a' + 10;
                }
                
                 sum +=  temp*(pow(16, j-1));
        }
        
        return sum; 
}
最佳答案
2018-3-18 10:46:08
嗯嗯知道了 ,你在第50行 pow函数的返回值是double型的 你在前面加一个(int)把他转化为int型就不会出错了
另外 主函数里的getch()应该是多余的
另外建议楼主输入十六进制数以0xff这样比较规范, 传字符数组的时候只要传向后两位的指针就可以了

最佳答案

查看完整内容

嗯嗯知道了 ,你在第50行 pow函数的返回值是double型的 你在前面加一个(int)把他转化为int型就不会出错了 另外 主函数里的getch()应该是多余的 另外建议楼主输入十六进制数以0xff这样比较规范, 传字符数组的时候只要传向后两位的指针就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 10:46:08 | 显示全部楼层    本楼为最佳答案   
嗯嗯知道了 ,你在第50行 pow函数的返回值是double型的 你在前面加一个(int)把他转化为int型就不会出错了
另外 主函数里的getch()应该是多余的
另外建议楼主输入十六进制数以0xff这样比较规范, 传字符数组的时候只要传向后两位的指针就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 12:07:12 | 显示全部楼层
#include <stdio.h>
#include <math.h>
#include <string.h>

//输入十六进制数,转换成十进制

#define MAX 30

int hex(char array[]);        //进制转换 

int main(void)
{
        char number[MAX];        //存放合法的十六进制数字 
        
        printf("请输入一个十六进制数:");
        scanf("%s", number);        
                                
        printf("十六进制的 %s 转换成十进制为 %d \n", number, hex(number));
                
        
        
        getch();
        return 0;
}

int hex(char array[MAX])
{
        int i, j;                //循环变量
        int sum = 0;        //获取最终结果 
        int len;                //获取该数组的长度
        int  temp;                //获取每个字符的转换成十进制后的值 

        len = strlen(array);
        
        for(i = len-1, j=0; i >= 0; i--, j++)
        {
                if(array[i] <= '9')
                {
                        temp = array[i] - '0';

                }
                else if(array[i] >= 'A' && array[i] <= 'F')
                {
                        temp = array[i] - 'A' + 10;

                }
                else if(array[i] >= 'a' && array[i] <= 'f')
                {
                        temp = array[i] - 'a' + 10;

                }
               

                 sum += temp*pow(16, j);
        }
        
        return sum; 
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 12:10:55 From FishC Mobile | 显示全部楼层
j从0开始循环,第50行指数为什么是j-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 14:39:09 | 显示全部楼层
楼主输入什么 少3?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-19 08:17:37 From FishC Mobile | 显示全部楼层
BngThea 发表于 2018-3-18 12:10
j从0开始循环,第50行指数为什么是j-1

俺这里不减的话会多乘一次,结果差距好大的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-19 12:41:52 | 显示全部楼层
Dr丶温 发表于 2018-3-19 08:17
俺这里不减的话会多乘一次,结果差距好大的。。
#include <stdio.h>
#include <string.h>
#include <ctype.h>

//输入十六进制数,转换成十进制

#define MAX 30

int hex(char array[]);        //进制转换 

int main(void)
{
        //char number[MAX];        //存放合法的十六进制数字 

        //printf("请输入一个十六进制数:");
        //scanf("%s", number);


        char number[MAX] = "9FFFF";
        printf("十六进制的 %s 转换成十进制为 %d \n", number, hex(number));



//        getch();
        return 0;
}

//int hex(char array[MAX])
//{
//        int i, j;                //循环变量
//        int sum = 0;        //获取最终结果 
//        int len;                //获取该数组的长度
//        int  temp;                //获取每个字符的转换成十进制后的值 
//
//        len = strlen(array);
//
//        for(i = len, j = 0; i >= 0; i--, j++)
//        {
//                if(array[i] <= '9')
//                {
//                        temp = array[i] - '0';
//                }
//                else if(array[i] >= 'A' && array[i] <= 'Z')
//                {
//                        temp = array[i] - 'A' + 10;
//                }
//                else if(array[i] >= 'a' && array[i] <= 'z')
//                {
//                        temp = array[i] - 'a' + 10;
//                }
//
//                sum += temp * (pow(16, j - 1));
//        }
//
//        return sum;
//}


int hex(char array[MAX])
{
        int len = strlen(array);
        int sum = 0;
        int temp;

        for(int i = 0; i < len; ++i)
        {
                if(isdigit(array[i]))
                {
                        temp = array[i] - '0';
                }
                else if(isupper(array[i]))
                {
                        temp = array[i] - 'A' + 10;
                }
                else
                {
                        temp = array[i] - 'a' + 10;
                }

                sum = sum * 16 + temp;
        }

        return sum;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-19 20:14:28 | 显示全部楼层

真是多谢代码啦,不过感觉用自己脑洞的基础上再深入好些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-19 20:18:50 | 显示全部楼层

还可以酱紫改!!!!!
长知识了,谢谢哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-19 20:19:24 | 显示全部楼层
t6am3 发表于 2018-3-18 14:41
嗯嗯知道了 ,你在第50行 pow函数的返回值是double型的 你在前面加一个(int)把他转化为int型就不会出错了 ...

感谢答疑,懂了一半了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 17:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表