将10进制转换成2进制,是除以2得到的余数,再倒序排列,这可以用递归实现,也可以用数据结构——栈实现。

先看递归实现:

 #include<stdio.h>
void to_two(int num);
int main()
{
int a = ;
to_two(a); return ;
}
/*递归实现把一个数转成16/8/2进制*/
//转16/8/2进制分别求余16/8/2,再除以16/8/2
//10 转 2进制
void to_two(int num)
{
if (num!=)
{
int remainder = num % ;
to_two(num/);
printf("%d", remainder);//这个输出函数的位置如果和上一句对调位置,将顺序输出
}
else
{ }
}

递归的实现方式,需要一定的逻辑性,如果把上述的打印函数和递归调用调换位置,输出将反向。这里对于递归的基础知识不做解释,如果忘记了,查询相关资料。

这里用递归能够很好的实现把最后求出的数先打印出来,对于这种先进后出,后进先出的模型,很自然会想到栈的实现。

那么,下面用数组实现一个栈,完成这个转换:

 /*main.c*/

 #include<stdio.h>
#include"stack.h"
int main()
{
int a[] = { ,,,,,,,,, };
for (int i = ; i < ; i++)
push(&selfstack, a[i]);
while (!isEmpty(&selfstack))
{
printf("%d\n", pop(&selfstack));
} return ;
}
 /*stack.h*/

 #pragma once
#include<malloc.h>
#define N 50
typedef int mytype; struct mystack {
int top;
mytype a[N];
}; struct mystack selfstack = { -, };
int isEmpty(struct mystack *S);
void setEmpty(struct mystack *S);
int push(struct mystack *S, mytype data);
mytype pop(struct mystack *S); /*
return 1: 是空栈 ;0:不是空栈
*/
int isEmpty(struct mystack *S)
{
if (S->top == -)
{
return ;
}
else
{
return ;
}
}
/*
没有malloc,可以简单这样设置空栈
*/
void setEmpty(struct mystack *S)
{
S->top = -;
}
/*
return 0,失败,1,成功
*/
int push(struct mystack *S, mytype data)
{
if (S->top == N - )
{
return ;
}
else
{
S->top += ;
S->a[S->top] = data;
return ;
}
} mytype pop(struct mystack *S)
{
S->top -= ;
return S->a[S->top + ]; }

可以看到,实现了数组方式的栈,但这个方式存在一些问题,需要优化,还没有达到专业软件工程师的要求,后面会实现一个基于表和另一个基于数组的栈的实现,那个时候将会做适当的调整。这个只是当做一个大战前的热身。

进制转化之递归 && 栈的更多相关文章

  1. 【风马一族_C】进制转化

    #include "stdio.h" #include "Math.h" #define number 50 //设置数组的长度 int num10; //十进 ...

  2. 编码/解码和进制转化工具hURL

    编码/解码和进制转化工具hURL   在安全应用中,各种编码方式被广泛应用,如URL编码.HTML编码.BASE64等.而在数据分析时候,各种进制的转化也尤为频繁.为了方便解决这类问题,Kali Li ...

  3. c语言进制转化

    #include <stdio.h> // 进制转化 int main(void) { ; ; int i3 = 0x32C; printf( printf( printf("十 ...

  4. HDU5050:Divided Land(大数的进制转化与GCD)

    题意:给定大数A和B,求gcd.所有数字都是二进制. 思路:先输入字符串,再转化为大数,然后用大数的gcd函数,最后转化为字符串输出. 利用字符串和大数转化的时候可以声明进制,就很舒服的完成了进制转化 ...

  5. python数据结构:进制转化探索

    *********************************第一部分*************************************************************** ...

  6. 《N诺机试指南》(五)进制转化

    进制转化类题目类型: 代码详解及注释解答:  //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...

  7. P1017进制转化

    P1017进制转化 也不知道为啥,这么简单的题困扰了我这么长时间 #include<cstdio> using namespace std; int m; //被除数= 除数*商 + 余数 ...

  8. js模拟栈---进制转化。十进制转任意进制进制,任意进制转十进制

    var Stack = (function(){ var items = new WeakMap(); //先入后出,后入先出 class Stack{ constructor(){ items.se ...

  9. python进制转化函数,10进制字符串互转,16进制字符串互转

    来了老弟,emmmmm,今天想到平时经常用到编码转化,把字符串转化为16进制绕过等等的,今天想着用python写个玩,查询了一些资料,看了些bolg 上面的两个函数是将二进制流转化为16进制,data ...

随机推荐

  1. Intellij IDEA 设置代码着色

    从visual studio到Eclipse再到Intllij IDEA,其实每个编译器都有自己的风格,但是就美观上来说,个人觉得还是visual studio的代码着色比较美观,exlipse次之, ...

  2. Java中创建实例化对象的几种方式

    Java中创建实例化对象有哪些方式? ①最常见的创建对象方法,使用new语句创建一个对象.②通过工厂方法返回对象,例:String s =String.valueOf().(工厂方法涉及到框架)③动用 ...

  3. HDUOJ---1133(卡特兰数扩展)Buy the Ticket

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. ORM轻量级框架---ActiveAndroid

    ORM即Object-Relational Mapping,对象关系映射.简单理解就是把我们Java的对象与数据库里面的记录进行映射,可以把实体对象持久化到数据库中,也能把查询到的记录映射成Java对 ...

  5. java JAXB + STAX(是一种针对XML的流式拉分析API)读取xml

    JDK1.5需要添加jar包,1.6以后就不需要了<dependency> <groupId>stax</groupId> <artifactId>st ...

  6. 10条建议让你创建更好的jQuery插件(转载)

    为了避免重复造轮子,自己手动开发jquery 插件,让小组其他成员可以直接使用.学习开发中,看到Phillip Senn 写的 关于jquery 插件开发注意10点,转载之! ------------ ...

  7. oc 调用c语言方法和oc的方法调用

    //c语方的方法 void sayHello(){ printf("Hello OC"); } int main(int argc, char * argv[]) { sayHel ...

  8. OAF_OAF控件系列8 - SubTab的实现(案例)

    2014-06-02 Created By BaoXinjian

  9. PLSQL_统计信息系列10_统计信息过旧导致程序出现性能问题

    2014-11-15 Created By BaoXinjian

  10. WebDav的java客户端开发包:sardine

    最近需要对WebDav服务器进行操作,查找了一下,基于java的开发包主要有这几个: slide Jackrabbit sardine webdavclient4j 其中slide是apache的一个 ...