| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6615 人关注过本帖
标题:函数调用,十进制转换为16进制
只看楼主 加入收藏
lastrobber
Rank: 2
来 自:廊坊
等 级:论坛游民
帖 子:26
专家分:52
注 册:2010-12-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
函数调用,十进制转换为16进制
RT,要求指定位数,位数不足时在前面补0,例如
TQ_GetHexStringEx(12,2);   返回  “0C”
TQ_GetHexStringEx(12,8);   返回  “0000000C”
应该怎么做呢?我知道核心算法应该是这样:
    int i,a[iCount];
    for(i=0;i<iCount;i++)
    {
        a[i]=iNumber%16;
        if(iNumber/16==0) break;
        iNumber=iNumber/16;
    }
    for(;i>=0;i--)
    {
        if(a[i]==10)
            printf("A");
        else if(a[i]==11)
            printf("B");
        else if(a[i]==12)
            printf("C");
        else if(a[i]==13)
            printf("D");
        else if(a[i]==14)
            printf("E");
        else if(a[i]==15)
            printf("F");
        else printf("%d",a[i]);
基础不行,不知道下面应该怎么写了,缺什么东西呢,望高人指点
搜索更多相关主题的帖子: 十进制 
2011-12-17 21:57
qwermy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:34
专家分:160
注 册:2011-12-3
收藏
得分:0 
第一次for后 i 要先 i--; 再用for  
2011-12-17 23:07
qwermy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:34
专家分:160
注 册:2011-12-3
收藏
得分:0 
还有第一个for 结束条件 是否要改下?  
2011-12-17 23:09
lastrobber
Rank: 2
来 自:廊坊
等 级:论坛游民
帖 子:26
专家分:52
注 册:2010-12-30
收藏
得分:0 
回复 3楼 qwermy
这个程序,补0应该怎么写呢?
2011-12-17 23:49
qwermy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:34
专家分:160
注 册:2011-12-3
收藏
得分:0 
我是这样想的:
要几位可以 把iCunt 设成需要的位数 for 结束条件不改;
或 想办法 补上所差的0; 比如 第一次 for条件改成 iNumber!=0 后得到的 i 就是所得的位数,差多少再想办法补上;
 
当然还有其它方法;

[ 本帖最后由 qwermy 于 2011-12-18 00:02 编辑 ]
2011-12-18 00:00
樾宝
Rank: 3Rank: 3
来 自:常德
等 级:论坛游侠
帖 子:72
专家分:147
注 册:2011-8-19
收藏
得分:0 
要这么麻烦不?
特别麻烦
2011-12-18 11:06
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 楼主 lastrobber
#include <stdio.h>
int main(void)
{
    int  n, n1, r, i = 0, size = 0, digit;
    char a[10];
    printf("Input a decimal number & digit:");
    scanf("%d,%d", &n, &digit);
    n1 = n;
    do
    {
        if(n < 0) n = - n;
        r = n % 16;
       if (r >= 0 && r <= 9)
           a[i] = r + '0';
       else if (r >= 10 && r <= 15)
           a[i] = r + '7';
        n = n / 16;
        i++;
    } while (n > 0);
    size = i;
    if(digit >= size)
    {
      printf("Hexadecimal number is:");
      n1 > 0 ? putchar(43) : putchar(45) ;
          for(i = 0; i < digit - size ; i++)
          putchar(48);
          for (i = size - 1; i >= 0; i--)
          printf("%c", a[i]);
          printf("H\n");
    }
    return 0;
}

[ 本帖最后由 有容就大 于 2011-12-18 22:24 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2011-12-18 18:46
痞子_唐
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:35
注 册:2011-12-18
收藏
得分:20 
你试试这个
#include<stdio.h>
#define iCount 10
int TQ_GetHexStringEx(int digital,int b);

int main(void)
{
    int digital,a;
    printf("依次输入十进制数和要表示的位数:\n");
    scanf("%d %d",&digital,&a);
    TQ_GetHexStringEx(digital,a);
    return 0;
}

int TQ_GetHexStringEx(int digital,int b)
{
    int i,a[iCount];
    for(i=0;i<iCount;i++)
    {
        a[i]=digital%16;
        if(digital/16==0)
            break;
        digital=digital/16;
    }
    if(b>i)
    {
        while(b-i-1!=0)
        {
            printf("0");
            b=b-1;
        }
    }
    for(;i>=0;i--)
    {
        if(a[i]==10)
            printf("A");
        else if(a[i]==11)
            printf("B");
        else if(a[i]==12)
            printf("C");
        else if(a[i]==13)
            printf("D");
        else if(a[i]==14)
            printf("E");
        else if(a[i]==15)
            printf("F");
        else printf("%d",a[i]);
    }
    return 0;
}
2011-12-18 20:51
lastrobber
Rank: 2
来 自:廊坊
等 级:论坛游民
帖 子:26
专家分:52
注 册:2010-12-30
收藏
得分:0 
多谢楼上几位了,仔细想了想,这题看着简单,的确有些麻烦,我是用数组做的,把之前的那几位不足的直接置0,然后输出,但是细节上的操作还不太好,因为基础不好,唉。不看书就是不行啊
2011-12-18 23:11
快速回复:函数调用,十进制转换为16进制
数据加载中...
 
   



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

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