| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 512 人关注过本帖
标题:[原创] 进制问题的请教
只看楼主 加入收藏
playboy_dmx
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-14
收藏
 问题点数:0 回复次数:0 
[原创] 进制问题的请教

我作的是10进制和其他进制(小于10)之间的相互转换,但是不知道为什么其他进制转换10进制好使,但是10进制转换其他进制却输不出结果。小弟恳请各位路过的高手帮帮小弟吧。我都熬几个通宵了,但是还是没有结果(我是小菜鸟呀)所以请大家帮帮忙…… 谢谢了!~ 希望大家帮帮我。

#include <stdio.h>
#include "math.h"
typedef int datatype;
#define maxsize 64
typedef struct
{datatype data[maxsize];
int top;
}seqstack;

/*置空栈*/
setnull1(s)
seqstack *s;
{s->top=-1;
}
/*判栈空*/
int empty1(s)
seqstack *s;
{if(s->top>=0) return 0;
else return 1;
}
/*进栈*/
seqstack *push(s,x)
seqstack *s;
datatype x;
{if(s->top==maxsize-1) {printf("overflow!");return NULL;}
else
{s->top++;
s->data[s->top]=x;
}
return(s->data[s->top]);
}

/*退栈*/
datatype pop(s)
seqstack *s;
{if(empty1(s))
{printf("Underflow!");return NULL;}
else
{s->top--;
return(s->data[s->top+1]);}
}


typedef struct
{datatype data[maxsize];
int front,rear;
}sequeue;

/*置队空*/
setnull2(sq)
sequeue *sq;
{
sq->front=maxsize-1;
sq->rear=maxsize-1;
}
/*判队空*/
int empty2(sq)
sequeue *sq;
{
if(sq->rear==sq->front)
return(1);
else return(0);
}
/*入队*/
int enqueue(sq,x)
sequeue *sq;
datatype x;
{
if(sq->front==(sq->rear+1)%maxsize)
{printf("Queue is full");return 0;}
else
{sq->rear=(sq->rear+1)%maxsize;
sq->data[sq->rear]=x;return(1);
}
}
/*出队*/
datatype dequeue(sq)
sequeue *sq;
{if(empty2(sq))
{printf("Queue is empty!"); return NULL;}
else
{sq->front=(sq->front+1)%maxsize;
return(sq->data[sq->front]);
}
}

converse1(N,d) /*十进制数向任意小于十进制数的转换,N为整数*/
long int N;
int d;
{int e;
seqstack *s;
setnull1(s);
while(N)
{push(s,N%d);
N=N/d;}
while(!empty1(s))
{e=pop(s);
}
}
/*empty1(s);
s->top=0;
while(N!=0)
{s->data[s->top++]=N%d;
N=N/d;
}
while(s->top!=0)
{e=s->data[s->top-1];
printf("%d",e);
s->top--;
}
} */
converse2(N2,d) /*N2为小数部分,d为待转换的进制数*/
float N2;
int d;
{sequeue *sq;
int i=0,c,f;
float b=N2;
setnull2(sq); /*例如0.3转换成二进制为0.3*2=0.6;取0 \ 0.6*2=1.2;取1
0.2*2=0.4;取0 \ 只取三位*/
while(i<3)
{b=b*d;
f=(int)b;
enqueue(sq,f); i++;
if(b>=d-1) b=b-f;
continue;
}
while(!empty2(sq))
{c=dequeue(sq);
printf("%d",c);}
}


converse3(N,d) /*任意小于十进制(取整数部分)向十进制转换*/
long int N;
int d;
/*int N,d;*/
{seqstack *s;
int i=-1,b,e;
float S=0;
setnull1(s);
while(N)
{b=N%10;
push(s,b);
i++;
if(N>=10)
{N=N/10;continue;}
N=0;
}
while(!empty1(s))
{e=pop(s);
S=S+e*pow(d,i);
i--;
}
return(S);
}

float converse4(N,d) /*任意小于十进制的小数部分向十进制转换*/
int N;
int d;
{sequeue *sq;
int i=-3,b,e;
float S=0;
printf("\nN=%d",N);
setnull2(sq);
while(N)
{b=N%10;
enqueue(sq,b);
N=N/10;
}
while(!empty2(sq))
{e=dequeue(sq);
printf(" #%d",e);
S=S+e*pow(d,i);
i++;
}
return(S);
}

main()
{seqstack *s;
long int N1;
int x,N3,d;
float N,N2,result,a,b;
clrscr();
printf("第一种情况为十进制与十以内进制数的转换!the first case is 10 to any number under 10 convert\n");
printf("第二种情况为十以内进制数与十进制数的转换!the second case is any number under 10 to 10 convert\n");
printf("input the case please input 1 or 2");
scanf("%d",&x);
switch(x)
{
case 1 : printf("\n十进制数与十以内进制数的转换 convert 10 to the number under 10 ");
break;
case 2 : printf("\十以内进制数与十进制数的转换convert any number under 10 to 10");
break;
default : ;
}
if(x==1)
printf("\n请输入要将十进制数转换为何种进制数10 to ? convert:");
else printf("\n请输入要将何种进制数转换为十进制数? to 10 convert:");
scanf("%d",&d);
printf("\n请输入待转换的数input the number which you want to convert");
printf("(请在小数点后输入三位数)please input three number behand the counter:");
scanf("%f",&N);
N1=(int)N;
N2=N-N1;
printf("N2=%f",N2);
if(x==1) /*十进制数向十以内任意进制数的转换*/
{if(N2==0) /*N为整数*/
{printf("\n结果为end is:");
converse1(N1,d);}
else /*N为小数 */
{
printf("结果为:end is ");
converse1(N1,d);
printf(".");
converse2(N2,d) ;}
}
else if(x==2) /*十以内任意进制数向十进制的转换*/
{if(N1==0) /*N为整数*/
{result=converse3(N,d);
printf("\n结果为end is:%f",result);}
else /*N为小数*/
{N2=N2*1000;
N3=(int)N2;
a=converse3(N1,d);
b=converse4(N3,d);
result=a+b;
printf("\n结果为end is: %f",result);}
}
getch();
}


搜索更多相关主题的帖子: 进制 
2006-06-14 16:44
快速回复:[原创] 进制问题的请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017217 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved