将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. [ACM] hdu 1671 Phone List (字典树)

    Phone List Problem Description Given a list of phone numbers, determine if it is consistent in the s ...

  2. textwrap 模块

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #textwrap 模块 #http://www.cnblogs.com/hongten/p/python_t ...

  3. python 2.7疑难问题之 编码

    #http://www.cnblogs.com/bluescorpio/p/4303656.html •在遇到错误提示时,注意查看错误提示内容,同时注意查看type类型. 1.TypeError: d ...

  4. Tomcat跨二级域配置

    内容转自:http://blog.csdn.net/luka2008/article/details/38385703/,请直接看原文,不过这篇“原文”也是转的... 1,Tomcat下 代码: im ...

  5. virtualenv沙箱

    准备用Django开发网站,豆瓣阅读中有<Django入门>,里面有人批注说用virtualenv+pip很好. 每次搞个什么都感觉举步维艰,因为之前太懒了,什么都懒得深入看一下.pip一 ...

  6. springmvc多视图配置

    http://blog.csdn.net/yaerfeng/article/details/23593755

  7. java中普通代码块,构造代码块,静态代码块的区别及代码示例

    本文转自:http://www.cnblogs.com/sophine/p/3531282.html 执行顺序:(优先级从高到低)静态代码块>main方法>构造代码块>构造方法. 其 ...

  8. HDUOJ---3371Connect the Cities

    Connect the Cities Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. Python 装饰器学习心得

    最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数 ...

  10. shell 编程之2>&1含义

    http://blog.csdn.net/gyanp/article/details/7258356 经常可以在一些脚本,尤其是在crontab调用时发现如下形式的命令调用 /tmp/test.sh ...