十六进制转换

想不出狂想 2017-11-08 12:25:11
题目描述

以字符形式逐个读入十六进制数的每一位。边读入边计算,将十六进制数转为10进制。假设数据不含小数。

输入

测试次数T

每组测试数据一行,为十六进制数。数据以#结束。

输出

对每组测试数据,输出转换后的十进制数字。

样例输入

3
1AE#
-123#
BC89#
样例输出

430
-291
48265


我的代码(初学者,请多多指点
问题在代码注释中

#include <stdio.h>
#include <stdlib.h>

int main()
{
int t,i,j,sum;
char num[10];

scanf("%d",&t);
for(j =0;j<t;j++)
{
i = 0,sum = 0;
int flag = 0;
do
{
scanf("%c",&num[i]);

/*if(num[i]=='-')
flag = 1;*/
if(num[i]<='9'&&num[i]>='0')
sum = sum *16+num[i]-'0';
if(num[i]<='F'&&num[i]>='A')
sum = sum *16+num[i]-'A'+10;

}while(num[i++]!='#');
/*if(flag)
printf("-");*/
if(num[0]=='-')//我不懂这里为啥会错,输入 -123# 时不是会执行这条语句吗,
printf("-");//然而我调试时发现 num[0] 不是'-',为啥会这样 ?(输出不了负号)
printf("%d\n",sum);
}
return 0;
}

运行结果
...全文
813 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dugf 2017-11-10
  • 打赏
  • 举报
回复 1
楼主的if判断里面每一步都要getchar()一次,把回车或者空格吃掉,不然下一个数组就不是从0开始输入了
自信男孩 2017-11-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t,i,j,sum;
    char num[10];

    scanf("%d", &t);
    getchar();    /*接收缓存*/
    for(j = 0;j<t;j++)
    {
        i = 0,sum = 0;
        //int flag = 0;
        do {
            scanf("%c",&num[i]);
            /*if(num[i]=='-')
              flag = 1;
              */
            if(num[i]<='9'&&num[i]>='0')
                sum = sum *16+num[i]-'0';
            if(num[i]<='F'&&num[i]>='A')
                sum = sum *16+num[i]-'A'+10;

        } while(num[i++]!='#');
        /*if(flag)
          printf("-");
        */
        if(num[0]=='-')
            printf("-");
        printf("%d\n",sum);
    }
    return 0;
}
输入t之后会有换行符'\n'残留在输入缓存里,因此用getchar();接收,能保证每次输入的'-'都是当i= 0里。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧