首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

數據結構實戰:棧實現十進制轉任意進制(2-9)

     編輯:關於C語言

問題描述

輸入十進制整數 a 與目標基數 R (2≤R≤9),輸出 a 的 R 進制表示。經典棧應用——「除基取餘,逆序輸出」。

算法流程

  1. while a > 0:push(a % R),a /= R
  2. 2. while !stack.empty():pop() 輸出

三種實現對比

版本核心代碼優缺點
STL stackstack S; S.push(a%r);代碼簡潔,生產級可用
手寫數組棧int top=-1; s[++top]=val;教學演示底層機制,無依賴
庫函數 itoaitoa(a, buf, r);非標準,Windows 專用,不可移植

完整可運行代碼(STL 版)

#include <cstdio>
#include <stack>
using namespace std;

int main() {
    long long a; int r;
    while (scanf("%lld %d", &a, &r) == 2) {
        stack S;
        if (a == 0) { putchar('0'); putchar('\n'); continue; }
        while (a > 0) {
            S.push(a % r);
            a /= r;
        }
        while (!S.empty()) {
            printf("%d", S.top());
            S.pop();
        }
        putchar('\n');
    }
    return 0;
}

邊界情況處理

  • 輸入 0 → 直接輸出 0
  • 負數輸入:題目未規定,實際可取絕對值前綴負號
  • 大整數:用 long long 或大整數庫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved