| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 471 人关注过本帖
标题:算法找错
只看楼主 加入收藏
惊叹者
Rank: 1
等 级:新手上路
帖 子:38
专家分:5
注 册:2013-3-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
算法找错
[code#include<stdio.h>
#include<string.h>//将16进制的数转化为10进制
#include<math.h>
#define MAX 1000
int main()
{
    int count(char s[]);
    int i=0,c;
    char t[MAX];
    printf("input number:");
    while ((c=getchar())!='\0'&&i<MAX)
    {if(c>='0'&&c<='9'||c>='A'&&c<='F')
    t[i++]=c;
    }
    t[i]='\0';
        printf("number: %d",count (t));
    return 0;
}
int count (char s[])
{
    int i,b=0;
        for(i=strlen(s);i>=0;i--)
        {if(s[i]>='0'&&s[i]<='9')
            b=b+(s[i]-'0')*  pow( 16, i);
            if(s[i]>='A'&&s[i]<='F')
                b=b+(s[i]-'A'+10)*   pow( 16, i);}
            return (b);

}
][/code]
搜索更多相关主题的帖子: include number return 
2013-05-16 10:38
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
你这是要干嘛的?不懂

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-05-16 11:22
惊叹者
Rank: 1
等 级:新手上路
帖 子:38
专家分:5
注 册:2013-3-5
收藏
得分:0 
回复 2楼 我叫沃恩
将16进制的数转化为10进制
2013-05-16 11:26
NewYear
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2013-5-14
收藏
得分:5 
输入的时候按16进制输入scanf("%x",&a);输出的时候按10进制输出printf("%d",a)。
2013-05-16 12:34
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
收藏
得分:15 
你这个程序有几个问题,一个是输入的结束条件不满足,以‘0’结束并不现实,空字符你怎么输入,输入为零的时候是被为字符0而不是字符ascii值为零,所以建议改为!=32,32是空格的值。还哟一个是你统计字符的长度,strlen函数 它统计的是字符串的长度,你的那个可以是定义的100个字符的,它统计的长度会准确吗?
2013-05-16 14:03
惊叹者
Rank: 1
等 级:新手上路
帖 子:38
专家分:5
注 册:2013-3-5
收藏
得分:0 
回复 5楼 cuijunchao
对的,那个空字符不能输入,后来改了,谢谢
2013-05-16 15:21
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
收藏
得分:0 
#define MAX 1000
 int main()
 {
     int count(char s[]);
     int i=0,c;
     char t[MAX];
     printf("input number:");
   
     while ((c=getchar())!=' '&&i<MAX)//运行条件修改
     {   
         if(c>='0'&&c<='9'||c>='A'&&c<='F')
         t[i++]=c;
     }
     t[i]='\0';
         printf("number: %d",count(t));
        
     return 0;
 }
 int count (char s[])
 {
     int i,b=0,temp=strlen(s);
         for(i=temp;i>0;i--)//这里你是逻辑出现错误,自己退一遍就清楚了
         {
             if(s[i-1]>='0'&&s[i-1]<='9')
                 b=b+(s[i-1]-'0')*pow( 16.0,temp-i);
             if(s[i-1]>='A'&&s[i-1]<='F')
                 b=b+(s[i-1]-'A'+10)*pow( 16.0,temp-i);
         }
             return (b);
 
}
这个可以的了 运行正确的
2013-05-16 16:11
快速回复:算法找错
数据加载中...
 
   



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

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