欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++实现各进制数之间的转换

程序员文章站 2022-05-18 10:47:08
...

学习计算机就不得不谈及简单的进制转换,毕竟都逃不过的哈哈哈

闲话不多说,先上代码

#include<cstdio>
int main(){
	int y= 0,product = 1;
	int x,x1;
	int p;
	printf("请输入需要被转化的进制数(as 2、8、10...):"); 
	scanf("%d",&p);
	printf("\n");
	printf("请输入一个%d进制数:",p); 
	scanf("%d",&x);
	x1=x;
	while(x!=0){
		y = y+(x%10)*product;  //x%10是为了每次获取x的个位数 
		x = x/10;     //去掉x的各位 
		product = product*p;  //produce在循环中不断乘p,得到1,p,p^2,p^3... 
	}
	printf("\n");
	printf("中间转化为十进制数值为:%d\n",y); 
	
	int z[40];    //数组z中存放pp进制中的每一位 
	int num = 0;
	int count=0;
	int pp;
	printf("\n");
	printf("请输入需要转化成的进制数(as 2、8、10...):"); 
	scanf("%d",&pp);
	do{
		z[num] = y%pp;  //除基取余 
	//	printf("%d\n",z[num]); 
	//	printf("%d\n",num); 
		num++;
		y = y/pp;
		count++;
	//	printf("%d\n",count); 
	//	printf("\n"); 
	}while(y!=0);
	printf("\n");
	printf("%d进制数%d转换%d进制数结果:",p,x1,pp); 
	for(int i=count-1;i>=0;i--){
		printf("%d",z[i]);
	}
	
} 
/*强调: 
int z[]={1,2,3,4,5,6,7,8,9};
void test(int z[]){...}
当将数组作为实参传递到另一个函数中时, 另一个函数的形参相当于一个指针变量,
因为将数组的名作为实参时, 就是将数字的首地址作为实参, 所以在test函数中输
出的sizeof(z)其实得到的是一个整型数组的长度(所占的字节数),?所以结果是8,
再用其除以int所占的字节数(4), 结果就是2 .

*/
/*
int i=5;
int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是多少
编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句
*/ 

代码可以在devc++集成环境下运行,结果自几个运行,代码中注释可有意阅读

C++实现各进制数之间的转换

简单讲一下原理:

1.将P进制数x转换成十进制数y

2.将十进制数y转换成PP进制数z(这里采用的是“除基取余法”)