| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1034 人关注过本帖
标题:两个十六进制转换为十进制并求和,表示已经看了一个小时找不出错在哪了
只看楼主 加入收藏
紫棋的大眼睛
Rank: 1
来 自:石家庄
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-10-17
结帖率:100%
收藏
 问题点数:0 回复次数:7 
两个十六进制转换为十进制并求和,表示已经看了一个小时找不出错在哪了
#include<stdio.h>
#include<math.h>
int main()
{
    int shu(char a[]);
    char a[10],b[10];
    int i=0,j=0,sum=0;
    gets(a);
    gets(b);
    sum=shu(a)+shu(b);
printf("%d",sum);

   


return 0;
}
int shu(char a[])
{
    int chang(char a[]);
    int i=0,j=0,t,m=0,n=0,sum=0,lon;
    lon=chang(a);

   
while(a[i]!='\0')
    {
        lon--;
        if(a[i]>='a' && a[i]<='f')
        {
            for(j=0;j<5;j++)
            {
                if(a[i]=='a'+m)
                {
                    t=10+n;
                    sum=sum+t*pow(16,lon);
                }
               
                m++;
                n++;
               
            }
        m=0;
        n=0;
        }
        sum=sum+(a[i]-48)*pow(16,lon);
        i++;
    }



return (sum);
}
int chang(char a[])
{
    int i=0,j=0;
    while(a[i]!='\0')
    {
        j++;
        i++;


    }
return (j);
   

}
搜索更多相关主题的帖子: 十六进制 include return 十进制 chang 
2015-01-07 21:05
紫棋的大眼睛
Rank: 1
来 自:石家庄
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-10-17
收藏
得分:0 
我说下我的思路,就是利用函数先求出长度,再判断是否为字母,再将ASCII码转换为数,再乘方求和,但是结果老是不对。。。求大神

大一新生,初学c语言,多多关照
2015-01-07 21:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
谭浩强风格的代码

授人以渔,不授人以鱼。
2015-01-07 22:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
要对数值进行计算,是不需要转换为十进制的。

授人以渔,不授人以鱼。
2015-01-07 22:44
则不然
Rank: 1
等 级:新手上路
帖 子:5
专家分:4
注 册:2015-1-7
收藏
得分:0 
main()函数对于shu()函数的调用,应该在main()函数之前对shu()进行个声明,或者把shu()写在main()前面。

C新手,刚去度娘证实了,仅供参考
2015-01-07 23:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>

#define FALSE   0
#define TRUE    !FALSE

typedef int BOOL;

const char* Hexadecimal = "0123456789ABCDEF";

int GetHexIndex(char ch);
int GetValueFromHex(const char* hexString);

int main(void)
{
    const char* str1 = "a100";
    const char* str2 = "FF";

    printf_s("[Hexadecimal] %s + [Hexadecimal] %s = [Decimal] %d\n", str1, str2, GetValueFromHex(str1) + GetValueFromHex(str2));

    _getch();
    return EXIT_SUCCESS;
}

// 计算指定字符在十六进制表中的序数
int GetHexIndex(char ch)
{
    int index;
    BOOL found = FALSE;

    ch = toupper(ch);
    for (index = 0; Hexadecimal[index] != '\0'; ++index)
    {
        if (Hexadecimal[index] == ch)
        {
            found = TRUE;
            break;
        }
    }

    return found ? index : -1;
}

// 把十六进制字符串转换为数值
int GetValueFromHex(const char* hexString)
{
    int value = 0;
    int index;

    while ((*hexString != '\0') && (index = GetHexIndex(*hexString)) != -1)
    {
        value = value * 16 + index;
        ++hexString;
    }

    return value;
}



授人以渔,不授人以鱼。
2015-01-07 23:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
回复 6楼 TonyDeng
C标准库已有这样的函数了
strtol, strtoll, strtoul, strtoull, strtoimax, strtoumax
strtof, strtod, strtold

另外,我怀疑楼主的题目要求中,输入的值很大,无法用内建的整形表示。
2015-01-08 08:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
楼主只是学生刚学,所做的练习题就是类似字符串转十进制数及其反转那样的,所以不用库函数。

授人以渔,不授人以鱼。
2015-01-08 21:23
快速回复:两个十六进制转换为十进制并求和,表示已经看了一个小时找不出错在哪了 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043683 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved