复习C语言系列一:10进制整数转2至32任意进制数





还可以设置为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(' ');
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值