c语言 进制转换

这篇博客介绍了如何实现十进制与其他进制之间的转换。通过输入一个数和目标进制,程序能将十进制数转换为其他进制,反之亦然。文章详细解释了转换算法,包括‘辗转相除法’和‘按权展开’,并提供了相应的C语言函数实现。此外,还展示了程序的运行示例,如将40转换为二进制得到101000,以及将1000八进制转换为十进制得到512。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在日常生活中都是用的是十进制比如0,1,2,3,4等等,但计算机以二进制为基础,在进行输入,输出和显示时也会用到其他进制,这是我们就要进行进制转换

编写程序时,首先用户输入一个数,并选择应该转换成几进制数,再将结果输出。如果在输入过程中出现错误,程序提示出错。

问题分析

用户输入的数可分为十进制数和非十进制数。

十进制数用辗转相除法,即除N取余除到商为0为止,然后将除得的结果逆序输出

非十进制数要按权展开得到十进制数后计算

这里我们使用函数

首先我们需要把输入的字符数字展会成十进制数

long change(int a[],int len,int b)
{
    int i,k=1;
    long num=0;
for(i=1;i<=len;i++)
{
    num=num+a[i]*k;
    k=k*b;                //k表示权值
}
    return num;
}

然后我们就需要写转换的函数啦

这里我们用ten-to-oth()表示将十进制转换成其他进制

 ten_to_oth()
{
	int sum,n,j,i=0,arr[80];
	printf("请输入十进制数:");
	scanf("%d",&sum);
	printf("请输入想要转换的进制数:");
	scanf("%d",&n);
	do
	{
		i++;				//从下标一开始计数 
		arr[i]=sum%n;				
		sum=sum/n;
		if(i>=80) printf("overflow\n");
	}while(sum!=0);
	printf("结果是:\n");
	for(j=i;j>0;j--)            //逆序输出
	printf("%d",arr[j]);
	printf("\n");
	return sum;
} 

十进制转化成其他进制就是这样呢,那其他进制转换成十进制呢?

其实都差不多

【比如我们将二进制数1001转换成十进制 ]

计算方法是1*2^0+1*2^3==9

那怎样用代码来实现他呢?

可以这样想,我们输入1001,计算机都读取的是数字1001,如果我们利用一个循环

for(i=1;num!=0;i++)
{
    arr[i]=num%10;
    num=num/10;
}

num是我们输入的数字

,经过循环后

(比如我们这里输入1001,第一次循环arr[1]=1;nun=100;

第二次arr[2]=0;num=10;        第三次arr[3]=0;num=1;        第四次arr[4]=1;num=0 ;    这时arr[]数组

里面就存放了我们输入的进制数 ,只需用我们刚开始写的long change()函数就能够转换成十进制

了呢 嘿嘿 )

用oth_to_ten表示将其他进制数转换成十进制数

oth_to_ten()
{
    int base,i,num,arr[80];
    long sum=0;
    char ch;
    printf("请输入你想要转换的进制");
    scanf("%d",&base);
    printf("请输入number:");
    scanf("%d",&num);
    for(i=1;num!=0;i++)
        {
            arr[i]=num%10;
            num=num/10;
        }
        sum=change(arr,i-1,base);
        printf("结果是:%ld\n",sum);
}

接下来就是主函数了

void main()
{
	int flag=1;
	while(flag!=0)
	{
		printf("\n1:十进制转换成其他进制\n");
		printf("\n2:其他进制转换成十进制\n");
		printf("\n0:退出\n");
		printf("\n输入一个数:");
		scanf("%d",&flag);
		switch(flag)
		{
			case 1:ten_to_oth();break;
			case 2:oth_to_ten();break;
			case 0:break;
		}
	}
}

运行结果大概就是这样啦

1:十进制转换成其他进制

2:其他进制转换成十进制

输入一个数:1
请输入十进制数:40
请输入想要转换的进制数:2
结果是:
101000
1:十进制转换成其他进制

2:其他进制转换成十进制

输入一个数:2
请输入你想要转换的进制8
请输入number:1000
结果是:512

嘿哈,这就结束了呢,明天也要继续加油哇!!!~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值