初学C语言,十进制int型、float型转化为其他进制数
来源:互联网 发布:佐藤胜利知乎 编辑:程序博客网 时间:2024/05/02 18:20
#include <stdio.h>
#include <stdlib.h>
#define INITSTACKSIZE 100
#define INCREATMENT 10
typedef struct stack
{
int * top;
int * base;
int stacksize;
}Stack;
typedef struct QueNode
{
int t;
struct QueNode * next;
}QueNode,*QueNodeptr;
typedef struct LinkQueue
{
QueNode *front;
QueNode *rear;
}LinkQueue;
Stack initstack(Stack s)
{
s.base = (int *)malloc(sizeof(int)*INITSTACKSIZE);
if(!s.base)
{
printf("申请空间失败!/n");
return s;
}
s.top = s.base;
s.stacksize = INITSTACKSIZE;
return s;
}
Stack push(Stack s,int in)
{
if(s.top - s.base >= s.stacksize)
{
s.base = (int *)realloc(s.base,sizeof(int)*(s.stacksize + INCREATMENT));
if(!s.base)
{
printf("申请空间失败,无法压栈!/n");
return s;
}
s.top = s.base + s.stacksize;
s.stacksize += INCREATMENT;
}
*s.top = in;
s.top++;
s.stacksize++;
return s;
}
Stack pop(Stack s)
{
if(s.stacksize == 0)
{
printf("栈为空,无法出栈!/n");
return s;
}
s.top--;
printf("%d",*s.top);
s.stacksize--;
return s;
}
LinkQueue * initlinkqueue(LinkQueue *lq)
{
lq->front = NULL;
lq->rear =NULL;
return lq;
}
LinkQueue * insertlinkqueue(LinkQueue * lq,int m)//bug
{
QueNode * s = NULL;
s = (QueNode *)malloc(sizeof(QueNode));
if(!s)
{
printf("队列结点申请空间失败!/n");
return lq;
}
s->t = m;
s->next = NULL;
if(lq->front == NULL && lq->rear == NULL)
{
lq->front = s;
lq->rear = lq->front;
}
else
{
lq->front->next = s;
lq->front = lq->front->next;
}
return lq;
}
LinkQueue * deletelinkqueue(LinkQueue * lq)
{
QueNode *p = NULL;
if(lq->front ==NULL && lq->rear == NULL)
{
printf("队列为空,无法删除!/n");
return lq;
}
else if(lq->front == lq->rear)
{
p = lq->rear;
printf("%d",p->t);
free(p);
lq->front = lq->rear = NULL;
}
else
{
p = lq->rear;
printf("%d",p->t);
lq->rear = lq->rear->next;
free(p);
}
return lq;
}
void inttoorder(int n,int d,int k)
{
int m;
Stack s;
s.base = NULL;
s.top = NULL;
s = initstack(s);
while(n)
{
m = n%d;
n = n/d;
s = push(s,m);
}
while(s.top != s.base)
{
s = pop(s);
}
if(k ==2)
{
printf("%c",'.');
}
}
void doubletoorder(float f,int d)
{
int m,len = 0;
LinkQueue *lq = NULL;
lq = (LinkQueue *)malloc(sizeof(LinkQueue));
if(!lq)
{
printf("队列申请空间失败!/n");
}
else
{
lq = initlinkqueue(lq);
while(f && len < 8)
{
m = int(f*d);
lq = insertlinkqueue(lq,m);
f = f*d - m;
len++;
}
while(lq->front != NULL && lq->rear != NULL)
{
lq = deletelinkqueue(lq);
}
}
}
void main()
{
int n,d,k;
float N1,f,N;
printf("请选择被转换数的类型:1---int型,2---float型/n");
scanf("%d",&k);
while(getchar() != '/n');
switch(k)
{
case 1:
{
printf("请输入要转化的十进制浮点型数:/n");
scanf("%d",&n);
while(getchar() != '/n');
printf("请输入要转换为的进制:/n");
scanf("%d",&d);
while(getchar() != '/n');
if(n >= 0)
{
printf("转换后的值为:/n");
inttoorder(n,d,k);
}
else
{
printf("转换后的值为:/n");
printf("%c",'-');
inttoorder(-n,d,k);
}
printf("/n");
break;
}
case 2:
{
printf("请输入要转化的十进制整形数:/n");
scanf("%f",&N1);
while(getchar() != '/n');
printf("请输入要转换为的进制:/n");
scanf("%d",&d);
while(getchar() != '/n');
printf("转换后的值为:/n");
N = N1;
if(N1 < 0)
{
printf("%c",'-');
N = -N1;
}
n = int(N); //溢出怎样处理
f = N - n;
if(n == 0)
{
printf("%d",0);
}
inttoorder(n,d,k);
doubletoorder(f,d);
printf("/n");
break;
}
default : printf("选择方式不正确,请重新选择!/n");
}
}
不对的地方,请大家指教。
- 初学C语言,十进制int型、float型转化为其他进制数
- 十进制转化为其他进制(C语言)
- C语言十进制转化为十六进制程序设计
- C语言十六进制转化为十进制程序设计
- 十六进制转化为十进制 c语言函数
- c语言 十进制转化为二进制
- 将十进制数(int类型或者float类型)转化为二进制数
- C语言——十进制转化为二进制
- 其他进制转化为十进制
- c语言 字符串转换为int或float
- C语言中强制转换float为int
- Swift String转化为Float、Int
- C语言的int, float,double相互转化(从本质上理解可能的问题)
- c语言里怎么把float转换为char型?
- 十进制转换为其他进制数
- java十六进制转化为其他进制 二进制转化为其他进制 十进制转化为其他进制案例
- C 十六进制转化为十进制数
- 十进制小数转化为其他进制的
- libnids-1.21 中 IP 分片重组分析之数据结构与处理流程
- HTTP协议
- 重建Oracle表空间专业技术指导
- 六步了解Oracle表空间状态
- oracle服务器配置及优化
- 初学C语言,十进制int型、float型转化为其他进制数
- 无(有点乱)
- 第一天:封装集合
- 美国和中国老师讲灰姑娘的故事(差距啊~体现得淋漓尽致)
- 每天一个目标,每天一个总结,每天都有收获
- 对话Sun软件开发经理Masood Mortazavi(一):关于计算机,技术以及生活的思考
- YsuhyORM 配置 示例数据库
- 新来生
- Java多线程