十进制转二至九进制

来源:互联网 发布:关于健康的软件 编辑:程序博客网 时间:2024/05/17 23:38

分析:

   算法基于的原理是:N=(N div d)×d+N mod d(div为整除运算,mod为求余运算),先得到的余数为低位后输出,后得到的余数为高位先输出,因此,将求得的余数放入栈中,再将栈元素依次输出即可得到转换结果。

算法如下:

#include<stdio.h>

#include<stdlib.h>

typedefstruct node

{int data;

structnode *next;

}

LinkStack;

LinkStack*Push(LinkStack *LS,int x) //入栈函数

{  LinkStack *p;

p=(LinkStack*)malloc(sizeof(LinkStack));

p->data=x;

p->next=LS;

LS=p;

returnLS;

}

LinkStack*Conversion(LinkStack *LS) //进行数值转换

{  int n=0;

intd=0;

printf("请输入要转换的数:\n");

scanf("%d",&n);

printf("请输入基数(2~9之间):\n");

scanf("%d",&d);

if(n<0||d<2||d>9)

{  printf("输入错误!\n");

exit(0);

}

if(n==0)//n==0,直接入栈

LS=Push(LS,0);

while(n)//当n!=0,进行求余、求商

{LS=Push(LS,n%d); //将余数入栈

n=n/d;

}return LS;

}

voidPrint(LinkStack *LS) //输出转换结果

{LinkStack *u;

u=LS;

printf("转换结果为:\n");

while(u!=NULL)

{ printf("%d",u->data);

u=u->next;

} printf("\n");

}

voidmain()

{ LinkStack *LS;

LS=NULL;

LS=Conversion(LS);

Print(LS);

}