文章

47

粉丝

109

获赞

9

访问

31.7k

头像
进制转换2 题解:
P1259 北京大学机试题
发布于2024年3月23日 17:18
阅读数 1.1k

用gets(s)!=NULL只有50%正确率

scanf("%s",s)!=EOF才能100%

第一种

#include<stdio.h>
#include<math.h>
#include<string.h>
int main() {
	//十六进制
	//int a;
	//scanf("%d", &a);
	//printf("0x%X", a);

	char s[105] = { 0 };
	//gets(s) != NULL
	while (scanf("%s",s)!=EOF) {
		int len = strlen(s);
		int sum = 0;//16转为10进制
		int ss[105] = { 0 };//将所有的英文转化为数字
		int cnt = 0;//记录有多少位,除去0,x;
		for (int i = len - 1; i >= 2; i--) {//去掉0,1两位
			if (s[i] >= 'A' && s[i] <= 'F') {
				ss[cnt++] = s[i] - 'A' + 10;//转化为数字
			}
			else if (s[i] >= 'a' && s[i] <= 'f') {
				ss[cnt++] = s[i] - 'a' + 10;
			}
			else {
				ss[cnt++] = s[i] - '0';//将字符数字转化为int
			}
		}
		//for (int i = 0; i < cnt; i++) { 检测是否转换成功
		//	printf("%d ", ss[i]);
		//}

		for (int i = 0; i < cnt; i++) {//多少个,也代表16的几次方

			int t = 1;//中间过渡的,分开两个乘数
			for (int j = 0; j < i; j++) {
				t = t * 16;
			}
			sum = sum + ss[i] * t;
		}
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发