其他进制转为十进制都可以实现,只需要将函数中的10和2换掉你需要的就行
#include <stdio.h>
#include <math.h>
// 1. 二进制转换为十进制
int twoConvertTen(long long n,long long size)
{
int result = 0; /* 结果数 */
int remainder; /* 余数 */
// 也可以使用while(n != 0){} 代替for循环
// 此种方法在二进制位数很多时,不适用
for(int i = 0; i < size; i++)
{
remainder = n % 10; /* 求出每一位的数值是1还是0 */
n /= 10;
result += remainder*pow(2,i);
}
return result;
}
// 2. 十进制转换为二进制
long long tenConvertTwe(int n)
{
int i = 1;
int result = 0; /* 结果数 */
int remainder; /* 余数 */
while (n != 0) {
remainder = n % 2;
n /= 2;
result += remainder * i;
i *= 10; /* 从个位->十位->百位->... */
}
return result;
}
int main(){
// 1. 二进制转换为十进制
long long n = 1111; /* n是二进制数 */
long long size = 4; /* size是二进制位数 */
printf("二进制数 %lld 转换为十进制为: %d\n",n,twoConvertTen(n,size));
// 2. 十进制转换为二进制
int a;
printf("输入一个十进制数: ");
scanf("%d",&a);
printf("十进制数 %d 转换为二进制数为: %lld",a,tenConvertTwe(a));
return 0;
}
运行结果:
下面的方法结合前辈的思路编写的。
任意进制之间都可以进行转换,只需要一个函数就能解决。
#include <stdio.h>
#include <math.h>
/*
任意进制转换:
a: 原进制下的数
b: 原进制的基
c: 目标进制的基
result: 转换后的结果
*/
long long conversion(int a,int b,int c)
{
int result = 0,i = 0;
while (a != 0) {
result += (a % c) * pow(b,i);
i = i + 1;
a /= c;
}
return result;
}
int main(){
// 1. 二进制转换为十进制
long long n;
printf("输入一个二进制数: ");
scanf("%lld",&n);
printf("二进制数 %lld 转换为十进制为: %lld\n",n,conversion(n,2,10));
printf("\n");
// 2. 十进制转换为二进制
int m;
printf("输入一个十进制数: ");
scanf("%d",&m);
printf("十进制数 %d 转换为二进制数为: %lld\n",m,conversion(m,10,2));
printf("\n");
// 3. 八进制转为二进制,需要调用两次函数
// 第一次由八进制转为十进制
// 第二次由十进制转为二进制
// 其他转换形式以此类推
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)