1. 程式人生 > 其它 >進位制轉換器(棧的方式)

進位制轉換器(棧的方式)

技術標籤:C & C++演算法c++

進位制轉換器(棧的方式)

轉換器例項
例如,使用者提供了一個十進位制數:10,要求將此資料以二進位制形式轉換,則通過進位制轉換器轉換的最終結果應該:1010。

提示:此進位制轉換器可以在 2-36 進位制之間對資料進行任意轉換。各進制中對應的數字如下表:

在這裡插入圖片描述
ASCII碼錶中:48-57對應0-9, 65-90對應A-Z

#include <stdio.h>
#include <string.h>
#include <math.h>
int top=-1;//top變數時刻表示棧頂元素所在位置
void push(char
* a,char elem){ a[++top]=elem; } void pop(char * a){ if (top==-1) { return ; } //輸出時要按照正確的格式顯示給使用者 if (a[top]>=10) { printf("%c",a[top]+55); //因為是10到35所以,要加55變成A-Z對應的ASCII碼值,65-90 }else{ printf("%d",a[top]); } top--; } //將各進位制數轉換成十進位制數
int scaleFun(char * data,int system){ int k=(int)strlen(data)-1; int system_10_data=0; int i; for (i=k; i>=0; i--) { int temp; if (data[i]>=48 && data[i]<=57) { //0-9 temp=data[i]-48; }else{ temp=data[i]-55; //A-Z的ASCII碼值65-90,所以減55變成10-35
} system_10_data+=temp*pow(system, k-i); // double pow(double x, double y) 返回 x 的 y 次冪,即 xy。 } return system_10_data; } int main() { char data[100]; int system; int newSystem; int system_10_data; printf("進位制轉換器,請輸入原資料的進位制(2-36):"); scanf("%d",&system); getchar(); printf("請輸入要轉換的資料:"); scanf("%s",data); getchar(); system_10_data=scaleFun(data, system); printf("請輸入轉換後的資料的進位制:"); scanf("%d",&newSystem); getchar(); while (system_10_data/newSystem) { //十進位制轉其它進位制,除其它進位制,倒取餘,用商繼續除. push(data,system_10_data%newSystem );//倒取餘,所以用棧 system_10_data/=newSystem; } push(data,system_10_data%newSystem); printf("轉換後的結果為:\n"); while (top!=-1) { pop(data); } }