数制转化


#include <stdlib.h> #include <stdio.h> #include "G:\JS\mystack.h" int main() { sqstack s; int m,n,r,rod,e; initstack(s); scanf("%d %d",&n,&r); m=n; while (n) { rod=n%r; push(s,rod); n=n/r; } printf("\n\nThe resule is:%d(%d)=",m,r); while (!emptystack(s)) { pop(s,e); if (e>=10) printf("%c",'A'+e-10); else printf("%d",e); } printf("%\n"); }

  

 ***********************************

 

 

#include <stdlib.h>
#include <stdio.h>
#include "d:\js\mystack.h"

void main()
{
    sqstack s;
    int m,n,r,rod,e;
    initstack(s);
    scanf("%d %d",&n,&r);
    m=n;
    while (n)
    {
        rod=n%r;
        push(s,rod);
        n=n/r;
    }
    printf("\n\nThe resule is:%d(%d)=",m,r);
    while (!emptystack(s))
    {
        pop(s,e);
        if (e>=10)
            printf("%c",'A'+e-10);
        else
            printf("%d",e);
    }
    printf("%\n");
}

  

 

 

 *******************************************

#include <stdlib.h>
#include <stdio.h>

#define stackinitsize 20
#define stackincrement 8


typedef struct{
  int *base;
  int *top;
  int stacksize;
}sqstack;


int  initstack(sqstack &s)
  {s.base=(int * ) malloc(stackinitsize*sizeof(int));
   s.top=s.base;
   s.stacksize=stackinitsize;
   return 1;
   }

int push(sqstack &s,int e)
 {
   *(s.top)=e;
   s.top++;
   return 1;
 }

int gettop(sqstack s)
{
  return *(s.top-1);
 }

int emptystack(sqstack s)
  {if (s.top==s.base)  return 1;
   else return 0;
   }

int pop(sqstack &s,int &e)
   { if (emptystack(s)) return 0;
     --s.top;
     e=*(s.top);
    return 1;
     }

  

转载于:https://www.cnblogs.com/wc1903036673/p/3395257.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我解释一下这个问题。 首先,八进制数是一以8为基数的数制。它使用8个数字(0到7)来表示所有数字。例如,八进制数17表示为21(1×8+7×1=17)。 而八进制输入的数制转化是将一个八进制数转换为十进制数。因为十进制数是我们通常使用的数制,所以将八进制数转换为十进制数可以让我们更容易地进行计算和比较。 现在,让我们来看看如何设计一个递归算法来实现八进制输入的数制转化。 首先,我们可以使用一个函数来将一个八进制数字的每一位转换为它的十进制值。例如,将八进制数173转换为十进制数的过程如下: 1. 将7转换为十进制,得到7。 2. 将3转换为十进制,得到3×8=24。 3. 将1转换为十进制,得到1×8^2=64。 4. 将这些值相加,得到7+24+64=95。 现在,我们可以使用递归来实现这个过程。具体来说,我们可以编写一个函数,它接受一个八进制数和一个指数作为参数,并返回该数的十进制值。该函数可以按以下方式工作: 1. 如果该数字只有一位,则返回其十进制值。 2. 否则,将该数字的最高位与其余位分开,并分别计算它们的十进制值。 3. 将最高位的十进制值乘以8的指数次方,并将其与其余位的十进制值相加。 4. 返回结果。 下面是使用 Python 编写的代码实现: ```python def octal_to_decimal(octal, exp): if octal < 10: return octal * (8 ** exp) else: digit = octal % 10 rest = octal // 10 return digit * (8 ** exp) + octal_to_decimal(rest, exp + 1) # 示例 octal_num = 173 decimal_num = octal_to_decimal(octal_num, 0) print(decimal_num) # 输出 95 ``` 在这个例中,我们使用了递归来计算八进制数173的十进制值。我们将该数字传递给 `octal_to_decimal` 函数,并将其初始指数设置为0。该函数首先检查数字是否只有一位。如果是,它将直接返回其十进制值。否则,它将该数字分成最高位和其余位,并将其余位的十进制值递归地计算出来。最后,它将最高位的十进制值乘以8的指数次方,并将其与其余位的十进制值相加,得到最终的十进制值。 希望这可以帮助回答你的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值