九度OJ 題目1080 進製轉換

2021-06-29 03:25:59 字數 1532 閱讀 3687

題目描述:將m進製的數x轉換為n進製的數輸出。

輸入:輸入的第一行包括兩個整數:m和n(2<=m,n<=36)。

下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。

輸出:輸出x的n進製表示的數。

樣例輸入:

16 10

f

樣例輸出:15

本題考查大數處理。將乙個m進製的大數d用n進製來表示,顯然先要將d用10進製表示。可以將d分解成各個數字上的數之和。由於可能是大數,所以在第k位上,基的k次方可能已經超過了資料的表示範圍,可以採用字串表示,所以講d轉化為10進製可能涉及到乙個大數和小數的乘,大數之間的加;最後,將乙個10進製的大數d'轉化成n進製數,可以一次整除n得到各個數字上的數,這就需要實現乙個大數除乙個小數的函式。由上,需實現的有:大數和小數乘,大數之間加,大數除以小數。為了方便,大數採用逆序的方式用string表示。

具體**如下:

#include

#include

#include

using namespace std;

int chartoint(char ch)

int inttochar(int i)

string bigdatamultismall(string bigdata,int sdata)//計算乙個10進製的大數(倒序)乘以乙個10進製小數

int i=bigdata.size();

while(carray>0)

return bigdata;

}string bigdataadd(string bigdata1,string bigdata2)//兩個倒序的大數相加,結果為10進製

while(i

while(i

while(carray>0)

return newbigdata;

}string bigdatadividesmallint(string bigdata,int sdigit,int &left)//大數除以小整數,返回10進製商,left帶回餘數,即為相應數為上的值

reverse(newbigdata.begin(),newbigdata.end());

while(!newbigdata.empty()&&newbigdata[newbigdata.size()-1]=='0')//去掉首位0

return newbigdata;

}string bigdatabasetran(string bigdata,int base1,int base2)//大數各數字逆序

int left=0;       //餘數

while(!bigd1.empty())

reverse(newbigdata.begin(),newbigdata.end());

return newbigdata;

}int main()

return 0;

}

九度OJ 題目1080 進製轉換

一.題目描述 將m進製的數x轉換為n進製的數輸出。輸入 輸入的第一行包括兩個整數 m和n 2 m,n 36 下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。輸出 輸出x的n進製表示的數。樣例輸入 16 10 f樣例輸出 二.題目分析 很久之前做的,但是一直wa,...

題目1138 進製轉換 九度OJ

題目1138 進製轉換 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 4282 解決 1608 題目描述 將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。輸入 多組資料,每行為乙個長度不超過30位的十進位製非負整數。注意是10進製數字的個數可能有30個,而非30bit...

OJ 1080 進製轉換

include include using namespace std void stringtoint string s,vector ve else ve.push back k void change vectorve,vector result,int m,int n int main in...