还可以设置为3,7,9,11,17等等进制 ^_^
#pragma warning(disable:4996)
#include <stdio.h>
#include <io.h>
#include <stdarg.h>
#include <ctype.h>
#include <process.h>
#include <limits.h>
#include <float.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
//#include <inttypes.h> C99
#define true 1
#define false 0
typedef int bool;
bool setBase();
void showNumber(long i,int base);
void showBit(long ival,int base,int count);
int main(int argc,char* argv[])
{
long ival=0;
bool i=0;
int ibase=10;
char ch;
while(true)
{
if(i)
{
i=false;
ch=getchar();
if('q'==ch)
break;
else if('s'==ch)
{
ibase=setBase();
system("cls");
}
}
printf("请输入一个整数,我将为您转化为%d进制数\r\n",ibase);
printf("q:退出,s:设置进制\r\n");
while(scanf("%d",&ival)==1)
{
system("cls");
printf("请输入一个整数,我将为您转化为%d进制数\r\n",ibase);
printf("q:退出,s:设置进制\r\n");
printf("%d\r\n",ival);
if (ival<0 || ival>LONG_MAX)
{
printf("您输入的数超出有效范围请重新输入");
break;
}
showNumber(ival,ibase);
printf("\r\n");
}
i=true;
}
system("pause");
return 0;
}
int setBase()
{
static bool ierror=false;
int ibase=0;
system("cls");
if(ierror)
printf("输入有误,请重新输入\r\n");
printf("请输入计数值2至32之一\r\n");
if(scanf("%d",&ibase)==1 &&
(ibase>=2 || ibase<=32))
{
ierror=false;
return ibase;
}
ierror=true;
while (getchar()!='\n');
return setBase();
}
void showNumber(long i,int base)
{
int count=1;
long temp=i;
while((temp/=base)>0)
count++;
showBit(i,base,count);
}
void showBit(long i,int base,int count)
{
static int flag=1;
int r=i%base;
if(i>=base)
{
showBit(i/base,base,count);
flag++;
}
else
flag=1;
if(r<10)
putchar('0'+r);
else
putchar('a'+r-10);
if(flag%4==count%4)
putchar(' ');
}