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;
}

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

猜你喜欢

转载自blog.csdn.net/qq_45841205/article/details/109439391