Hdu 2031-送り変換

1430 ワード

データ構造シーケンス
 
十進数のNを入力して、R進数の数に変換します.Rが10より大きい場合は、16進数(例えば10はAで表します.)を参照します.
この問題は私達のデータ構造課の実験問題でもあります.だから、私は順番スタックを利用して実現しました.もちろん、行列逆順で出力してもいいです.
 
 
ACコードは以下の通りです
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 10005
typedef int Elemtype;
typedef struct Stack
{
    Elemtype data[M];
    int top;
}Stack;
struct Stack *Init()
{
    struct Stack *s;
    s= (struct Stack *)malloc(sizeof(struct Stack ));
    if(s!= NULL)
    {
        s->top = -1;
        return s;
    }
    else exit(0);
}

int main()
{
    struct Stack *s;
    int r,n,temp;
    s = Init();
    while(scanf("%d%d",&n,&r)!= EOF)
    {
        if(n<0)
        {
            printf("-");
            n = (-1)*n;
        }
        while(n)
        {
            s->top++;
            s->data[s->top] = n%r;
            n = n/r;
        }
        while(s->top != -1)
        {
            if(s->data[s->top] >= 10 )
            {
                temp = s->data[s->top]-10+'A';
                s->top--;
                printf("%c",temp);
            }
            else
            {
                temp = s->data[s->top];
                s->top--;
                printf("%d",temp);
            }
        }
        printf("
"); } return 0; }