| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 607 人关注过本帖
标题:写的不好。。。。求指点。。。
只看楼主 加入收藏
hywhll888
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2011-6-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
写的不好。。。。求指点。。。
#include <stdio.h>
#include <math.h>
#include <string.h>
void main()
{
    void sjz(char a[80]);
    char a[80];
    gets(a);
    sjz(a);
}


void sjz(char a[80])
{
    int i,k=0,n,j,r=16,w=0;
    n=strlen(a);
    for(i=0;a[i]!='\0';i++)
    {
        if(a[i]=='x'||a[i]=='X')
        {
            n=n-1;
            continue;
        }
        if(n>=3)
        {
            k=16;
            for(j=2;j<n;j++)
                k=k*r;
            if(a[i]>='0'&&a[i]<='9')
            {
                k=k*(a[i]-'0');
            }
            else
                if(a[i]>='a'&&a[i]<='f')
                {
                    k=k*(10+a[i]-'a');
                }
                else
                    if(a[i]>='A'&&a[i]<='F')
                    {
                        k=k*(10+a[i]-'A');
                    }        
                    n=n-1;
                    printf(" %d ",k);
        }
        else
            if(n==2)
            {
                k=16;
                if(a[i]>='0'&&a[i]<='9')
                {
                    k=k*(a[i]-'0');
                }
                else
                    if(a[i]>='a'&&a[i]<='f')
                    {
                        k=k*(10+a[i]-'a');
                    }
                    else
                        if(a[i]>='A'&&a[i]<='F')
                        {
                            k=k*(10+a[i]-'A');
                        }
                        n=n-1;
                        printf(" %d ",k);
            }
            else
                if(n<2)
                {
                    k=0;
                    if(a[i]>='0'&&a[i]<='9')
                    {
                        k=k+(a[i]-'0');
                    }
                    else
                        if(a[i]>='a'&&a[i]<='f')
                        {
                            k=k+(10+a[i]-'a');
                        }
                        else
                            if(a[i]>='A'&&a[i]<='F')
                            {
                                k=k+(10+a[i]-'A');
                            }
                            printf(" %d ",k);
                }
                w=w+k;
    }
    printf("\n");
    printf("w=%d\n",w);
}


觉得有点太长了。。。。  请给个比较短的算法,最好不要用指针。。。偶看不懂。。。
功能是输入16进制数,按10进制输出。。。。。感觉也太长了

[ 本帖最后由 hywhll888 于 2011-7-14 21:39 编辑 ]
搜索更多相关主题的帖子: continue include 
2011-07-14 18:04
菜鸟auto
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:100
注 册:2010-7-23
收藏
得分:7 
求功能 求注释
2011-07-14 21:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:7 
如果你乐意,库函数就能干这个。
输入十六进制,输出十进制。
程序代码:
int d;
scanf("%x", &d);
printf("%d\n", d);

如果你要从字符串转数字的话,可以用 strtol 这样的函数。

不过要练手的话,你写的那个就行。长一点不是什么坏事。
不过你可以改进成不是固定进制的。比较写一个函数,既可以从十六进制转十进制,也可以从八进制车十进制,或者其它的一些进制。只要多传个参数就行了。
2011-07-15 10:14
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
……最近老发重帖
2011-07-15 10:14
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:7 
建议还是学习一下指针,有好处的。。别老是畏难而放弃。

我们都在路上。。。。。
2011-07-15 10:54
hywhll888
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2011-6-9
收藏
得分:0 
回复 5楼 hellovfp
不是畏难,是还没学到指针
2011-07-15 21:43
yangtian260
Rank: 1
来 自:四川
等 级:新手上路
帖 子:8
专家分:1
注 册:2011-7-4
收藏
得分:0 
结果不对头啊
2011-07-15 21:52
空军一号1号
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2011-7-16
收藏
得分:0 
指针挺好
2011-07-16 00:49
快速回复:写的不好。。。。求指点。。。
数据加载中...
 
   



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

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