其等值的N进制数
10 void Conversion(int N) {
11 double x, decimal;
12 int integer;
13 scanf("%lf", &x);
14 integer =(int)floor(x); //整数部分
15 decimal = x - integer; //小数部分
16 //处理整数部分
17
18 StackType *e;
19 SqStack *ps, s;
20 ps = &s;
21 e = (StackType*)malloc(sizeof(StackType)); //为指针e分配内存地址
22 InitStack(ps); //初始化栈
23 while (integer) //当integer不等于0
24 {
25 Push(ps, integer % N); //压入integer 除以N的余数
26 integer = integer / N;
27 }
28 while (EmptyStack(ps) != OK) //当栈不为空
29 {
30 Pop(ps, e); //弹出的栈顶元素,并让e指向其地址
31 printf("%d ", *e); // 输出e 每一个数码间用空格隔开
32 }
33 //处理小数部分
34 if (decimal) { //小数部分不为0 才处理
35 SqList *L;
36 ElemType m;
37 L = (SqList*)malloc(sizeof(SqList)); //为指针L分配内存地址
38 InitList(L); //初始化顺序表
39 while (decimal) //当decimal不为0
40 {
41 m = (ElemType)floor(decimal*N);
42 BackInsert(L, m); //插入decimal*N的整数
43 decimal = decimal * N - m;
44 }
45 printf(". ");
46 PrintList(L); //每一个数码之间用空格隔开
47 }
48 }
49 int main() {
50 int N;
51 printf("请输入目标进制:");
52 scanf("%d", &N);
53 printf("将十进制数n转换为%d进制数,请输入:n(>=0)=", N);
54 Conversion(N);
55 return 0;
56
57 }
合理的使用数据结构可以使代码跟易读,易懂。栈的引入
简化了程序设计的问题,划分了不同的关注层次,逻辑思路清晰。
|