文章

47

粉丝

109

获赞

33

访问

34.5k

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

用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;
		}
...
登录查看完整内容


登录后发布评论

5 条评论
圣灵传说
2025年1月26日 15:41

能说一下为什么不用EOF就只有50%正确率吗

 

赞(0)

快乐小土狗 : 回复 圣灵传说: 因为多组输入的格式,书上有讲的:https://noobdream.com//Major/article/70/

2025年1月26日 17:34

圣灵传说 : 回复 快乐小土狗: 也就是说机器判卷需要多组输入,而代码需要写成适合多组输入这种形式是吗

2025年2月3日 11:05

快乐小土狗 : 回复 圣灵传说: 看题目要求,如果题目说了有多组测试数据输入,那就要写成这种形式。简单说,就是你写多组输入的形式,不管题目是单组还是多组都不会错,就是代码会写多一点。

2025年2月3日 13:31

圣灵传说 : 回复 快乐小土狗: 谢了大佬

2025年2月3日 23:21