优秀的编程知识分享平台

网站首页 > 技术文章 正文

C语言实现十进制转2~16进制、十六进制转十进制

nanyue 2024-08-06 18:04:49 技术文章 4 ℃

1、十进制转216进制

【问题描述】从键盘输入十进制整数num及转换的进制数base,将整数num转换为base进制(base取值范围为 2~16)。

方法为:十进制数除base取余法,即十进制数除以base,余数为权位上的数,得到的商值继续除以base,依此步骤继续向下运算直到商为0为止。

源程序:

#include<stdio.h>

void trans(int data, int base)

{

int x[64],k,i=0;

while(data)

{

x[i]=data%base;

data/=base;

i++;

}

for(k=i-1;k>=0;k--)

if(x[k]<10)

printf("%d", x[k]);

else if(x[k]<=16)

printf("%c", 'A'+x[k]-10);

}

int main(void)

{

int num,base;

scanf("%d%d", &num, &base);

if(base<=0||base>16)

{

printf("data error\n");

return;

}

printf("number=%d base=%d\n",num,base);

trans(num,base);

printf("\n");

return 0;

}

2、十六进制转十进制

【问题描述】输入一个字符串,取出该字符串中的十六进制字符(不分大小写)组成一个新的表示十六进制数的字符串,输出该字符串并将其转换成十进制数后输出。

方法为:十六进制数由数字0~9、字母A~F(或a~f)组成。把十六进制数按权展开、相加即得十进制数。

源程序:

#include<stdio.h>

#include<string.h>

int main(void)

{

char s[20],hex[20];

int i,j,num;

gets(s);

/* 取出字符串中的十六进制字符 */

for(i=0,j=0;s[i]!='\0';i++)

{

if(s[i]>='0'&&s[i]<='9'||s[i]>='A'&&s[i]<='F'||s[i]>='a'&&s[i]<='f')

{

hex[j]=s[i];

j++;

}

}

hex[j]='\0';

printf("Hexadecimal String: ");

puts(hex);

/* 十六进制转十进制 */

num=0;

for(i=0;hex[i]!='\0';i++)

{

if(hex[i]>='0'&&hex[i]<='9')

num=num*16+hex[i]-'0';

else if(hex[i]>='A'&&hex[i]<='F')

num=num*16+hex[i]-'A'+10;

else if(hex[i]>='a'&&hex[i]<='f')

num=num*16+hex[i]-'a'+10;

}

printf("Decimal number=%d\n",num);

return 0;

}

最近发表
标签列表