将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. 自定义网站的icon和收藏夹图标

    定制网站收藏夹图标的方法有两种: 第一种方法: 第一步,当然是准备一个能体现您的主页的风格和个性的图标.比较简便的办法除了下载,就是将您的网站的logo做成一个图标. 第二步,将这个图标文件命名为:f ...

  2. linux 系统文件的特殊权限

    文件权限与归属 Linux系统中的一切都是文件,但每个文件的类型不尽相同,并且Linux系统会用不同的符号来加以区分,常见的包括有 -:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设 ...

  3. Word基础总结

    Word文本的操作 一.文 ◎Backspace(退格键) 删除光标以左的内容    ◎Delete (删除键)    删除光标以右的内容     #实话之前一直没在意,一直用backspace删除 ...

  4. webview使用遇到 It is possible that this object was over-released, or is in the process of deallocation错误的解决办法

    使用wekwebview时,push后,再pop返回,报错了: Cannot form weak reference to instance (xxxx) of class xxxx. It is p ...

  5. 去掉cb中括号的匹配

    Settings->Editor->General settings->Indent options->Brace completion``

  6. HDUOJ----2063过山车

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. HDUOJ---2110

    Crisis of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. POJ--Strange Way to Express Integers

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 8370   ...

  9. 为Github 托管项目的访问添加SSH keys

    为了便于访问远程仓库,各个协作者将自己的本地的项目内容推送到远程仓库中,使用 SSH keys 验证github的好处:不用每次提交代码时都输入用户名和密码. 如果SSH key没有添加到github ...

  10. Loading...加载图收集

    收集来源:http://cs.fangjia.com/zoushi/