C语言——进阶编程题(字符串、进制转换)

C语言——进阶编程题(字符串、进制转换)

输入一个十六进制的数值字符串。(进制转换)
输入:
0xA
输出
10
基本思路:从输入入手,不妨当它为一个字符串,只不过特殊点(为一个十六进制数),那么我们恰巧可以利用这个十六进制输入格式作为循环判断条件,只需要稍稍改改,接下来就是重头戏了,十六进制转十进制的算法,对十六进制的(0x之后的)每位数进行运算——例如:0xAA对应的十进制数等于(从右向左)A16^0加上A16的1次方,结果就为170.(enenenenen权值是什么,哈哈哈,十六进制的权值就是16,十进制就是10,以此类推),整体思路下来就可以写了。哪有人又问了,“飞哥,咋求次方运算呢“,那就要用到<math.h>头文件中的函数pow(底数,幂),注意!注意!注意!它的返回值类型为double类型,而我们的进制转换一般为整数运算,所以切记强制换形。(格式(类型)pow(,)).
十六进制中A=10,B=11以此类推到F=15。

#include<stdio.h>
#include<string.h>
#include<math.h>
int Ox_D(char ch[]){
	int ten = 0;
	for (int i = strlen(ch) - 1,j=0;ch[i]!='x';--i,++j){
		if (ch[i] >= '0'&&ch[i] <= '9'){
			ten = ten + (ch[i] - 48)*(int)pow(16, j);//字符型数字和十进制数差值为48
		}
		else if (ch[i]=='A'||ch[i]=='a'){
			ten = ten + 10*(int)pow(16, j);
		}
		else if (ch[i] == 'B' || ch[i] == 'b'){
			ten = ten + 11 * (int)pow(16, j);
		}
		else if (ch[i] == 'C' || ch[i] == 'c'){
			ten = ten + 12 * (int)pow(16, j);
		}
		else if (ch[i] == 'D' || ch[i] == 'd'){
			ten = ten + 13 * (int)pow(16, j);
		}
		else if (ch[i] == 'E' || ch[i] == 'e'){
			ten = ten + 14 * (int)pow(16, j);
		}
		else {
			ten = ten + 15 * (int)pow(16, j);
		}
	}
	return ten;
}
int main(){
		char ch[5000];
		while (scanf("%s", ch) != EOF){
			printf("%d\n", Ox_D(ch));
		}
	return 0;
}

好了,就到这里吧,我会不定期更新程序代码,自己写的,可能不完善,也是对自己的一种督促,喜欢的可以关注一波偶,顺带点个赞吧。嘻嘻。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值