欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

7-4 BCD解密 (10分)

程序员文章站 2022-06-08 13:02:28
...

基础编程题目集

这题还比较有意思,单单读懂题目就先花了我十几分钟啊。
话不多说,先上题目:
7-4 BCD解密 (10分)

分析一下,这个题目讲的就是把十进制转换成十六进制,而且最大的就是0x99,所以只用考虑第一位的A-F。
那就先来看看我的一遍过的代码吧:

#include<stdio.h>
void formula(int a);//函数声明

int main()
{
	int a, x, y;
	scanf("%d", &a);//输入BCD数
	if (a > 15)//判断是几位十六进制的数
	{
		x = a / 16;//算算第二位
		y = a - x * 16;//算算第一位
		formula(x);//调用函数
		formula(y);
	}
	else {
		formula(a);
	}
	return 0;
}

void formula(int a)
{
	if (a > 9) printf("%c", a + 'A' - 10);//用了ASCII码输出字符
	else printf("%d", a);//0-9就直接输出数字了
}

写过一些题目,对"\n"的要求非常高,但是这个题目我调用两次这个函数没有用"\n",再完善一点就是在return 0之前输出"\n"。
难就难在怎么输出A-F吧。
附上我同学的代码,另一种方法,也不是不行:

#include <stdio.h>
int main()
{
	int a, b, c; char x;
	scanf("%d",&a);
	b = a % 16;
	c = a / 16;
	if (b == 10) x = '1';
	if (b == 11) x = '2';
	if (b == 12) x = '3';
	if (b == 13) x = '4';
	if (b == 14) x = '5';
	if (b == 15) x = '6';
	if (c == 0)
	{
		if (b >=10)
			switch (x)
			{
			case'1':printf("A"); break;
			case'2':printf("B"); break;
			case'3':printf("C"); break;
			case'4':printf("D"); break;
			case'5':printf("E"); break;
			case'6':printf("F"); break;
			}
		else
			printf("%d", b);
	}
	else
		if (b >= 10)
		{
			switch (x)
			{
			case'1':printf("%dA", c); break;
			case'2':printf("%dB", c); break;
			case'3':printf("%dC", c); break;
			case'4':printf("%dD", c); break;
			case'5':printf("%dE", c); break;
			case'6':printf("%dF", c); break;
			}
			if(b<10)
		 { printf("%d%d", c, b); }
			
		}
	return 0;
}

这是他的原代码,看着好像很多的样子,所以我帮他简化了一下:

#include <stdio.h>
int main()
{
	int a, b, c; char x;
	scanf("%d", &a);
	b = a % 16;
	c = a / 16;
	if (b == 10) x = '1';
	if (b == 11) x = '2';
	if (b == 12) x = '3';
	if (b == 13) x = '4';
	if (b == 14) x = '5';
	if (b == 15) x = '6';
	if (c != 0) printf("%d", c);
	if (b >= 10)
		switch (x)
		{
		case'1':printf("A"); break;
		case'2':printf("B"); break;
		case'3':printf("C"); break;
		case'4':printf("D"); break;
		case'5':printf("E"); break;
		case'6':printf("F"); break;
		}
	else
	{
		printf("%d", b);
	}
	return 0;
}

是不是比他的简洁了很多呢?switch语句也是一种不错的选择。
这般如此,第四题也比较轻轻松松的写完了。