| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖
标题:关于进制转换,请帮忙
只看楼主 加入收藏
cdutzh101
Rank: 2
等 级:论坛游民
帖 子:43
专家分:64
注 册:2009-8-20
结帖率:50%
收藏
已结贴  问题点数:50 回复次数:10 
关于进制转换,请帮忙
有个题目,用递归的方法实现十六进制转10进制。我用的是一般的,没用递归
void main()
{
char a[16]="123456789ABCDEF",char c[20];
int b[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int m,i,j,k,sum=0;
printf("请输入你要的十六进制:");
gets(c);
m=strlen(c);
for(j=0;j<m;j++)
    {for(i=0;i<16;i++)
    {    if(c[j]==a[i])
        {   k=m-j-1;
            sum=sum+b[i]*pow(16,k);
         }
     }}
printf("你的转换后十进制为:%d",sum);
}
请大家帮忙给个递归的方式吧。谢谢了
搜索更多相关主题的帖子: 十六进制 
2011-04-01 22:59
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:6 
你这个过程好像是从16进制的字符串形势,转换成整数,然后再用10进制打印出来。如果我没理解错,你是想要输入16进制字符串,比如FF,输出10进制的数整数255,或字符串“255”。(前者是atoi,strtol相当于)。
我就给你写个前者的例子,因为递归其实是最简单最直观的方法。
int CharToInt(char c)
{
    if(c>='A' && c <= 'F') return c -'A' + 10;
    else if(c>='a' && c<='f') return c-'a' + 10;
    else return c - '0';
}

int HexToInt(const char* szHex, int szlength)
{
    if(szlength == 0) return 0;
    else return CharToInt(szHex[szlength - 1]) + (HexToInt(szHex, szlength - 1) << 4);
}

int main()
{
    char c[20] = "FF";
    int sum = HexToInt(c, strlen(c));
}

完全在脑海里手工写的,没有用编译器编译过,仅提供给你参考。
为了简单和直观起见,我没有用string.h里的除了strlen以外的C字符串处理函数。

[ 本帖最后由 hoodlum1980 于 2011-4-2 06:51 编辑 ]

my tech blog: /hoodlum1980
2011-04-02 06:47
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:6 
进制转换 先看看书吧

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-04-02 23:23
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:6 
坛子里早有讨论, 我搜过!

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-02 23:23
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:6 
2011-04-06 15:56
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
尝试着写了一个,
程序代码:
root@~ #cat 1.c
#include <stdio.h>

int main (void) {

        int h2d (char a[],int i),len=0;
        char a[]="FFFF";

        while(a[len]!='\0') { len++; }
        len-=1;
        printf ("%s ",a);
        printf ("Decimal is %i\n",h2d(a,len));
        return 0;

}
int h2d (char a[],int i) {
        static int b=1,sum=0;
        if(i==-1) {
                return 0;
        }else{
                if(a[i]>='0'&&a[i]<='9') {
                        sum+=(a[i]-'0')*b;
                        a[i]='\0';
                        b*=16;
                        h2d(a,i-1);
                }else{
                        sum+=(a[i]-'A'+10)*b;
                        a[i]='\0';
                        b*=16;
                        h2d(a,i-1);
                }
                return sum;
        }
}

测试:
root@~ #./1
FFFF Decimal is 65535
root@~ #

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-06 18:02
ebao
Rank: 2
来 自:杭州
等 级:论坛游民
帖 子:33
专家分:66
注 册:2011-3-9
收藏
得分:6 
程序代码:
#include "stdafx.h"
#include <math.h>
#include <string.h>
int sl(char *a,int c);
int sum=0;
void main()
{
    char a[20];
    int sum1,c;
    printf("请输入你要的十六进制:");
    gets(a);
    c=strlen(a);
    sum1=sl(a,c);
    printf("%d\n",sum1);
}


int sl(char *a,int c)
{
   
   
    if(c != 0)
    {
        if('0'<=*a  && *a<='9')
        {
           sum+=int(*a-'0')*pow(16,c-1);
   
        }
        else
        {
              sum+=(int(*a-'a')+10)*pow(16,c-1);
        }
    a=a+1;
    c=c-1;
    sl(a,c);
    }
    else
    return sum;
}
2011-04-06 22:47
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:6 
回复 6楼 ansic
仁兄用的是linux系统?犀利啊。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-04-06 22:58
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用waterstar在2011-4-6 22:58:34的发言:

仁兄用的是linux系统?犀利啊。

⊙﹏⊙b汗, 有几年不用啦, 现在用cygwin~

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-06 23:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:6 
回复 9楼 ansic
哦。难怪老是 root~
2011-04-06 23:33
快速回复:关于进制转换,请帮忙
数据加载中...
 
   



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

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