代码如下:
(在求整数长度的时候注意0的存在)
(注意字符型数组中存储的是acsii码,比如说要将整数1存到字符型数组arr[100]中,则是arr[i]=1+'0';)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
void DigiTran(int k, char res[]);
int main()
{
int a,b;
scanf("%d", &a);
if (a == -1);
else {
for (; a != -1;)
{
char res[100];
int arr_length = 0;
int a_length = 0;
if (a != 0) {
a_length = (int)log10(a) + 1;//得到整数位数
}
else
{
a_length = 1;
}
//将输入的整数按位存在字符串数组中
for (int i = 0; i < a_length; i++) {
res[arr_length++] = '0' + a / (int)pow(10, a_length - i - 1);
a = a % (int)pow(10, a_length - i - 1);
}
//将字符串数组中的数字转换为大写字母输出
DigiTran(arr_length, res);
printf(" ");
scanf("%d", &b);
a = b;
}
}
return 0;
}
void DigiTran(int k, char res[])
{
for (int i = 0; i < k; )
{
if (i == k - 1)
{
char a = res[i] - '0' + 'A';
printf("%c", a);
i++;
}
else
{
if (res[i] == '0' || res[i] == '1')
{
char a = 10 * (int)(res[i] - '0') + res[i + 1] - '0' + 'A';
printf("%c", a);
i = i + 2;
}
else if (res[i] == '2')
{
if (res[i + 1] >= '0' && res[i + 1] <= '5')
{
char a = 10 * (int)(res[i] - '0') + res[i + 1] - '0' + 'A';
printf("%c", a);
i = i + 2;
}
else
{
char a = res[i] - '0' + 'A';
printf("%c", a);
i++;
}
}
else
{
char a = res[i] - '0' + 'A';
printf("%c", a);
i++;
}
}
}
}