数据结构实验之栈一:进制转换
输入一个十进制非负整数,将其转换成对应的 R (2 <= R <= 9) 进制数,并输出。
Input
第一行输入需要转换的十进制非负整数;
第二行输入 R。
Output
输出转换所得的 R 进制数。
Example Input
1279
8
Example Output
2377
c++ 代码如下1:
#include"stdio.h"
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef int elemtype; //声明 elemtpye 代表 int类型 元素类型
typedef int status; //声明 状态
#define MAXSIZE 100
#define OVERFLOW -2
#define another 50
#define true 1
#define false 0
typedef struct{ //命名一个新的类型名代表结构体类型
//顺序栈的类型定义
elemtype *base;
elemtype *top;
int stacksize;
}Sqstack;
status isEmpty(Sqstack &S){ //判断是否 空栈
if(S.top == S.base) //判空操作,top = base;
return true;
else
return false;
}
void initStack(Sqstack &S){ //初始化操作
S.base = new elemtype[MAXSIZE];
S.top = S.base;
S.stacksize = MAXSIZE;
}
elemtype getTop(Sqstack &S){ //取栈顶操作
if(S.base == S.top)
return false;
else
return *(S.top-1);
}
void Push(Sqstack &S, elemtype e){ //入栈操作
if(S.top-S.base >= S.stacksize){
S.base = (elemtype *)realloc(S.base,(another+S.stacksize)*sizeof(elemtype));
S.top = S.base + S.stacksize;
S.stacksize += another;
}
*S.top++ = e;
}
int Pop(Sqstack &S, elemtype &e){ //出栈操作
return e = *--S.top;
}
int main(){
int n, r;
Sqstack S; //原型int的类结构体
initStack(S); //初始化函数
scanf("%d %d", &n, &r);
if(n < 0) // n < 0
printf("-"),n = -n; //n = 0
if(n == 0)
printf("0");
while(n){
int cnt = n%r; //求余数 传过来是一个一个
n = n/r; //除
Push(S,cnt);
}
while(!isEmpty(S)){ //结合判空操作
int cnt = Pop(S, cnt);
printf("%d",cnt);
}
printf("\n");
return 0;
}
#include<iostream>
#include<stdlib.h>
using namespace std;
const int maxsize = 100000;
class Stack
{
int data[maxsize];
public:
int top;
Stack();
bool isEmpty();
bool isFull();
void Push(int);
int Pop();
void Print();
void Clear();
};
Stack::Stack()
{
top = -1;
}
bool Stack::isEmpty()
{
if (top == -1) return true;
else return false;
}
bool Stack::isFull()
{
if (top== maxsize - 1) return true;
else return false;
}
void Stack::Push(int e)
{
if (isFull()) exit(0);
else data[++top] = e;
}
int Stack::Pop()
{
if (isEmpty()) exit(0);
else return data[top--];
}
void Stack::Print()
{
while (top!=-1)
cout << Pop();
cout << endl;
}
int main()
{
Stack S;
Stack();
int n, m; cin >> n >> m;
if (n == 0) cout << "0" << endl; //注意当n==0时的情况
else
{
while (n)
{
S.Push(n%m);
n = n / m;
}
S.Print();
}
return 0;
}
c语言代码如下2:
如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
#include<stdio.h>
#include<string.h>
int main()
{
int n,r,i;
while(scanf("%d %d",&n,&r)!=EOF)
{
if(n<0)
{
printf("-");n=-n;
}
if(n==0){printf("0\n");continue;}
int c=0,a[100];
while(n)
{
a[c]=(n%r);
c++;
n/=r;
}
for(i=c-1;i>=0;i--)
{
if(a[i]>=10)
{
printf("%c",'A'+a[i]-10);
}
else printf("%d",a[i]);
}
printf("\n");
}
}
原文:https://blog.csdn.net/qq_39051129/article/details/76736618