例:把十进制整数转换为二至九之间的任一进制数输出。
由计算机基础知识可知,把一个十进制整数x转换为任一种:进制数得到的是一个r进制的整数,假定为y,转换方法是逐次除基数r取余法。具体叙述为:首先用十进制整数%除以基数r,得到的整余数是r进制数y的最低位y0,接着以二除以r的整数商作为被除数,用它除以r得到的整余数是y的次最低位y1,依次类推,直到商为0时得到的整余数是y的最高位ym,假定,共有m十1位。这样得到的y与x等值,y的按权展开式为:
#include <iostream>
#include <fstream>
using namespace std;
typedef int ElemType;
const int StackMaxSize = 50;
struct Stack
{
ElemType stack[StackMaxSize];
int top;
};
#include "stack.h"
void Transform(long num, int r);
int main()
{
long num;
int r;
cin>>num>>r;
Transform(num,r);
return 0;
}
void Transform(long num, int r)
{
Stack S;
InitStack(S);
while(num)
{
Push(S,num%r);
num /= r;
}
while(!StackEmpty(S))
cout<<Pop(S);
cout<<endl;
}
从十进制整数转换为r进制数的过程中,由低到高依次得到r进制数中的每一位数字,而输出时又需要由高到低依次输出每一位。所以此问题适合利用栈来解决,具体算法描述为:
.cpp文件: