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