| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 608 人关注过本帖
标题:新手求大神指导——十六进制转八进制
只看楼主 加入收藏
yanglin_gdqy
Rank: 2
等 级:论坛游民
威 望:3
帖 子:59
专家分:86
注 册:2013-12-2
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:2 
新手求大神指导——十六进制转八进制
问题描述:
    给定n个十六进制正整数,输出它们的八进制
数。

输入格式:
    输入的第一行为一个正整数n (1<=n<=10).
    接下来n行,每行一个由0^9、大写字母A~F组
成的字符串,表示要转换的十六进制正整数,每个十
六进制数长度不超过100000.

输出格式:
    输出n行,每行为输入对应的八进制正整数。

注意:
    输入的十六进制数不会有前导0,比如012A.
    输出的八进制数也不能有前导0.

样例输入:
    2
    19
    123ABC

样例输出:
    71
    4435274

提示:
    先将十六进制数转换成某进制数,再由某进
制数转换成八进制。

自己写的代码如下,有哪些地方需要改进的?求大神们指点!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

struct link
{
    int eigth[150000];
    int t;//第几位结束
    struct link *next;
};

struct link *head, *this, *new;

int Toeigth(int ten);
int List();

int main(int argc, char *argv[])
{
    int n;
    scanf("%d", &n);
   
    head = NULL;
    this = NULL;
    new = NULL;
   
    char sixth[1000000];
    int i, len;
    for(i=1; i<=n; i++)
    {
        fflush(stdin);
        len = 0;
        char ch;
        ch = getchar();
        while(ch != '\n')
        {
            sixth[len] = ch;
            ch = getchar();
            len++;
        }
        len--;
        
        int mid1 = 0;
        int mid2 = 0;//放入输入的每个字符实际要表示的值
        int j = 0;
        while(len >= 0)
        {
            if((sixth[len] >= 48) && (sixth[len] <= 57))
                mid2 = sixth[len] - 48;
            else if((sixth[len] >= 65)&&(sixth[len] <= 90))
                mid2 = sixth[len] - 55;
            else
            {
                printf("error!\n");
                return 0;
            }
            mid1 = mid1 + mid2*pow(16, j);
            len--;
            j++;
        }
            
        Toeigth(mid1);
    }
    List();
   
    return 0;
}

int Toeigth(int ten)
{
    new = (struct link*)malloc(sizeof(struct link));
    new->next = NULL;
    new->t = 0;
   
    int yu, shan;
    shan = -1;
    while(shan != 0)
    {
        yu = ten%8;
        shan = ten/8;
        new->eigth[new->t] = yu;
        ten = shan;
        new->t++;
    }
    new->t--;
   
    if(head == NULL)
        head = new;
    else
    {
        this = head;
        while(this->next != NULL)
            this = this->next;
        this->next = new;
    }
   
    return 0;
}

int List()
{
    this = head;
    while(this->next != NULL)
    {
        while(this->t >= 0)
        {
            printf("%d", this->eigth[this->t]);
            this->t--;
        }
        this = this->next;
        printf("\n");
    }
   
    while(this->t >= 0)
    {
        printf("%d", this->eigth[this->t]);
        this->t--;
    }
   
    return 0;
}
搜索更多相关主题的帖子: 十六进制 八进制 正整数 字符串 字母 
2014-02-03 09:43
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:10 
不知道你是想从什么方面进行改进?

为实现功能?还是超时?

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-02-03 12:18
yanglin_gdqy
Rank: 2
等 级:论坛游民
威 望:3
帖 子:59
专家分:86
注 册:2013-12-2
收藏
得分:0 
回复 2楼 蚕头燕尾
高效性和可读性
2014-02-03 12:51
快速回复:新手求大神指导——十六进制转八进制
数据加载中...
 
   



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

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