通过使用循环队列的方式将十进制纯小数M转化成B进制数;
#include <stdio.h>
#include <stdlib.h> //malloc需要的头文件;
#define size 100
typedef struct
{
int data[size];
int rear;
int front;
int count;
}cirqueue;
cirqueue *q; //全局指针变量
void initqueue() //置队空;
{
q->front=q->rear=0; //对头和队尾下表为0;
q->count=0; //元素为空;
}
int queuefull() //判断队是否为满;
{
return q->count==size;
}
int enquque(int x) //入队
{
if(queuefull())
{
puts("队满");return 0;
}
q->data[q->rear]=x;
q->rear=(q->rear+1)%size; //循环队列的主要因素
q->count++; //记得每次入队要加1
return 1;
}
int queueempty() //判断队是否为空;
{
return q->count==0;
}
int dequque(int *y) //出队
{
if(queueempty())
{
puts("队空");return 0;
}
*y=q->data[q->front];
q->front=(q->front+1)%size; //循环队列的主要因素
q->count--; //记得每次入队要减1
return 1;
}
double conver(double m,int b) //十进制m转b进制
{
int y;
int j;
q=(cirqueue *)malloc(sizeof(cirqueue)); //给指针分配空间;
initqueue(); //初始化置空;
if(m!=0) //0转任何进制都是0,所以不需要加小数点;
printf("0.");
while(m!=0&&j++<=size) //m为0时运算结束,如果小数点位数超出队列空间也结束;
{
if(enquque((int)(m*b)))//m/b取整;
m=m*b-(int)(m*b);//m/b取小数继续除 ,直到为0结束;
else
exit(0);
}
while(!queueempty())//只要队列不为空,就一直循环,直到空为止;
{
if((dequque(&y))) //将队列中的整数出队,即为运算结果;
{
if(y>=10)
printf("%c",y+87);//将十进制转化成十六进制的形式;
else
printf("%d",y);
}
else
exit(0);
}
}
void main()
{
double m;
int b;
printf("请输入m=");
scanf("%lf",&m);
printf("请输入b=");
scanf("%d",&b);
conver(m,b); //进制转换函数;
}
兄弟们如果觉得这篇文章对你有一点小小的帮助的话,希望给一点小小的鼓励点一个赞吧,兄弟我在这里谢谢啦!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)