将void xie(char *buffer, int x, int base)函数里循环改为使用递归调用,三个参不变
#include <stdio.h>
void swap(char *a, char *b)
{
char t = *a;
*a = *b;
*b = t;
}
void xie(char *buffer, int x, int base)
{
char *p = buffer;
if (x == 0)
{
*p++ = '0';
}
else
{
while (x > 0)
{
int n = x % base;
if (n < 10)
*p++ = '0' + n;
else
*p++ = 'A' + n - 10;
x /= base;
}
}
*p = '\0';
--p;
while (buffer < p)
swap(buffer++, p--);
}
int main()
{
char buffer[255];
int bases[] = {2, 5, 6, 8, 13, 16, 20}, x;
scanf("%d", &x);
for (int i = 0; i < sizeof(bases) / sizeof(int); i++)
{
xie(buffer, x, bases[i]);
printf("%d: %s\n", bases[i], buffer);
}
return 0;
}
修改如下:
需要将buffer定义为全局变量
#include <stdio.h>
char buffer[255] = {0};
void swap(char *a, char *b)
{
char t = *a;
*a = *b;
*b = t;
}
void xie(char *buf, int x, int base)
{
if (x == 0)
{
*buf = 0;
buf--;
char *p = buffer;
while (p < buf)
swap(p++, buf--);
}
else
{
int n = x % base;
if (n < 10)
*buf = '0' + n;
else
*buf = 'A' + n - 10;
xie(buf+1,x/base,base);
}
}
int main()
{
int bases[] = {2, 5, 6, 8, 13, 16, 20}, x;
scanf("%d", &x);
for (int i = 0; i < sizeof(bases) / sizeof(int); i++)
{
xie(buffer, x, bases[i]);
printf("%d: %s\n", bases[i], buffer);
}
return 0;
}
void xie(char *buffer, int x, int base)
{
if (x == 0)
{
*buffer = 0;
return;
}
int n = x % base;
if (n < 10)
*buffer = '0' + n;
else
*buffer = 'A' + n - 10;
xie(buffer + 1, x / base, base);
}
void restr(char *buf)
{
char t;
int len = 0;
while (buf[len])
len++;
len--;
for (int i = 0; i <= len / 2; i++)
{
t = buf[i];
buf[i] = buf[len - i];
buf[len - i] = t;
}
}
int main()
{
char buffer[255];
int bases[] = {2, 5, 6, 8, 13, 16, 20}, x;
scanf("%d", &x);
for (int i = 0; i < sizeof(bases) / sizeof(int); i++)
{
xie(buffer, x, bases[i]);
restr(buffer);
printf("%d: %s\n", bases[i], buffer);
}
return 0;
}