早教吧 育儿知识 作业答案 考试题库 百科 知识分享

利用栈的基本操作实现将任意一个十进制整数转化为R进制整数

题目详情
利用栈的基本操作实现将任意一个十进制整数转化为R进制整数
▼优质解答
答案和解析
看到这道题目想到了三个方法,依次给你列出(栈的方式,递归,数组) 栈的方式: //思路:将十进制数(number)除以R取余,让取得的余数(number Mod R )进栈,让十进制数变为 number/R,重复上述过程,直到number等于0为止,然后依次从栈中取出数据即为所求,直到栈为空,下面是实现的代码: #include #include #define MAX_SIZE 80 typedef struct {//栈的数据结构,采用数组 char data[MAX_SIZE]; int top; }stack; int isfull(stack s) {//判断栈是否已满 return (++s.top==MAX_SIZE); } int isempty(stack s) {//判断栈为空 return s.top==-1; } void push(stack * s,char in_data) {//进栈 if(isfull(*s)) { printf("栈已满,不能执行操作!\n"); exit(1); } s->data[++s->top]=in_data; } void pop(stack *s) {//出栈 if(isempty(*s)) { printf("栈已空,不能执行操作!\n"); exit(1); } s->top--; } char top_value(stack *s) {//取栈顶元素 if(isempty(*s)) { printf("栈已空,不能执行操作!\n"); exit(1); } return s->data[s->top]; } int main(int argc,char** argv) { int number; stack result; result.top=-1; int r_range; printf("输入转换的数据和对应的进制:"); scanf("%d%d",&number,&r_range); printf("%d对应的%d进制为:",number,r_range); while(number!=0) { char input; if(number%r_range>=10) input=((number%r_range)-10)+'a'; else input=((number%r_range)+'0'); push(&result,input); number=number/r_range; } while(!isempty(result)) { putchar(top_value(&result)); pop(&result); } return 0; } ==================================================================== 递归的方式:定义一个输出字符串,让十进制数(number)除以要转换的进制R 若结果不为0,则继续执行前述操作,直到得到除的结果为零,此时number除以R取其余数,将其结果(number Mod R)映射到指定的输出字符数组中下标输出即为结果(描述的不是很好,你看代码吧) //用这种方法也比较可以 #include void ten_to_any(int number,int range_t) {//递归实现 char text[]="0123456789abcdef"; int k=number/range_t; if(k) ten_to_any(k,range_t); putchar(text[number%range_t]); } int main() { int number,r_range; while(1) { printf("\n输入转换的数据,和对应进制:"); scanf("%d%d",&number,&r_range); if(r_range>16||r_range<2) { printf("超出了范围!"); break; } printf("%d对应的%d进制为:",number,r_range); ten_to_any(number,r_range); } return 0; } //采用数组的形式 这是我上次回答别人的 用一个字符串保存转换的结果(str[80])假设十进制数为number,转换的进制为digits,则将numbers%digits(根据余数的情况做相应处理)结果保存在字符串str中,将numbers变为numbers/digits;直到numbers为零。得到的结果为逆序,需要将其倒转,倒转后即为所求。 //-----------c语言实现10进制转2~16进制 #include #include void TentoAny(int number,char *str,int digits) { int i=0; if(digits>16||digits<2)//非2~16进制则直接退出 return ; while(number) { if(number%digits>=10) { str[i++]='A'+(number%digits-10); } else { str[i++]=number%digits+'0'; } } str[i]='\0'; strrev(str);//strrev函数定义在string.h中的,是对字符串做逆序处理的函数 //这里需要逆序的原因是因为得到的结果为该进制的逆序 } int main() { int number,i; char str[80]; printf("输入一个十进制数:"); scanf("%d",&number); printf("\n---------2到16进制对应关系----------\n"); for(i=2;i<=16;i++) { TentoAny(number,str,i); printf("%d转换为%d进制为:%s\n",number,i,str); } return 0; } //希望对你有所帮助
看了 利用栈的基本操作实现将任意一...的网友还看了以下:

从二羰基到二溴现有一个1,3二羰基化合物现在要把他变成1,3二溴正是原来羰基的地方变成溴请问有什么  2020-05-02 …

CpG岛相关为什么CpG如果是低甲基化状态就不会抑制基因的表达,而高甲基化状态会影响基因的表达?难  2020-06-29 …

阅读下列材料,完成下列问题。(共15分)材料一:《太原市城市总体规划调整方案》,它从太原市作为山西省  2020-11-11 …

中共十三大制定的党在社会主义初级阶段基本路线规定A.到20世纪末,使人民生活达到小康水平B.到对世纪  2020-12-01 …

中共十三大制定的党在社会主义初级阶段基本路线规定A.到20世纪末,使人民生活达到小康水平B.到对世纪  2020-12-01 …

中共十三大制定的党在社会主义初级阶段基本路线规定[]A.到20世纪末,使人民生活达到小康水平B.到2  2020-12-01 …

到2020年我国基本实现--化,基本型成学习型社会,进入人力资源强国行列A.人才年轻化B.教育现代化  2020-12-14 …

下图基本呈现了近代前期中国工人数量整体变化趋势,透过这一变化趋势不能窥见A.洋务运动的足迹B.外商企  2020-12-16 …

我国社会主义初级阶段的起止时间是()A.从新中国建立到基本实现社会主义现代化B.从社会主义基本制度建  2021-02-05 …

我国社会主义初级阶段的起止时间是[]A.从新中国建立到基本实现社会主义现代化B.从社会主义基本制度建  2021-02-05 …