数字换字母 密码

设0对应A,1对应B,......,25对应Z。从左向右考察k的各位数字,若连续两位对应上面一种变换,则直接换掉两位数字,否则一位数字换成对应的字母。输入一些非负整数,最后输入-1代表结束。

示例输入:(数字间空一格)

12 3925 0 319211 -1

示例输出:(每个字符串后面空一格)

M DJZ A DTVB 

注意点:

0)使用ASCII的对应关系将数字转化成字母

1)由于使用了while提取每一位数字并判断当前操作数字位数,所以要将0单独分成一类

2)当吃进当前位置与下一位置的数字时讨论是否大于25,若小于25在输出后注意需要将i+1,随后在for中i会再加1,从而避免重复读取数字。

代码展示:

#include <stdio.h>

int main() {

	int i,meme;
	int temp = 0;

	for (i = 0; i < 1000; i++)
	{
		int num[1000] = {};  //每次对输入的一个数字进行分析,完成后清空内容准备读取下一个数字
		int k = 0;
		int j = 0;
		int x[100] = {};
		int y[100] = {};

		scanf_s("%d", &temp);
		if (temp == -1)  //遇到-1停止读取
			break;

		else if (temp != -1)
		{
			num[k] = temp;

			if (num[k] == 0)
				printf("A ");

			else if (num[k] != 0)
			{
				while (num[k])
				{
					x[j] = num[k] % 10;
					j = j + 1;
					num[k] = num[k] / 10;
				}
				for (i = 0; i <= j - 1; i++)
				{
					y[i] = x[j - i - 1];  //将逆序提取出来的数字正序排放,注意后面全是0
				}
				for (i = 0; i <= j - 1; i++)
				{
					if (i == j - 1)
					{
						meme = 65 + y[i];
						printf("%c ", meme);  //最后一位特殊处理,防止与后面未使用的0混在一起
					}
					else
					{
						if (y[i] == 0)
						{
							printf("A");
						}
						else if ((y[i] * 10 + y[i + 1]) > 25)
						{
								meme = 65 + y[i];
								printf("%c", meme);
						}

						else if ((y[i] * 10 + y[i + 1]) <= 25)
						{
							if (i != j - 2)
							{
								meme = 65 + (y[i] * 10 + y[i + 1]);
								printf("%c", meme);
							}

							if (i == j - 2)
							{
								meme = 65 + (y[i] * 10 + y[i + 1]);
								printf("%c ", meme);
							}

							i = i + 1;
						}

					}
				}
			}
		}
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值