進制轉換(進制轉換)

進制轉換

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 31674    Accepted Submission(s): 17612


Problem Description
輸入一個十進制數N,將它轉換成R進制數輸出。
 

Input
輸入數據包含多個測試實例,每個測試實例包含兩個整數N(32位整數)和R(2<=R<=16, R<>10)。
 

Output
爲每個測試實例輸出轉換後的數,每個輸出佔一行。如果R大於10,則對應的數字規則參考16進制(比如,10用A表示,等等)。
 

Sample Input
7 2 23 12 -4 3
 

Sample Output
111 1B -11
 

Author
lcy
 

Source
 

#include<cstdio>
#include<iostream>
#include<cstring>
const int maxn=1000;
using namespace std;
int t[maxn],A[maxn];
char str1[maxn],str2[maxn];
int n,m;
void solve(char *str1,char *str2,int n,int m)
{
    int i,len,k;
    len=strlen(str1);
    for(i=len;i>=0;i--)
    {
        t[len-1-i]=str1[i]-(str1[i]<58?48:str1[i]<97?55:61);
        //小於58說明是48-57是數字
        //小於97是65-90爲大寫英文字母
        //大於97是97-122爲小寫英文字母!
        //同時也說明了0-9存的是數字
        //10-25存的是大寫字母
        //26-61存的是小寫字母
    }
    for(k=0;len;)
    {
        for(i=len;i>=1;i--)
        {
            t[i-1]+=t[i]%m*n;
            t[i]/=m;
        }
        A[k++]=t[0]%m;
        t[0]/=m;
        while(len>0&&!t[len-1])
        {
            len--;
         }
    }
    str2[k]=NULL;
    for(i=0;i<k;i++)
    {
        str2[k-1-i]=A[i]+(A[i]<10?48:A[i]<36?55:61);
    }
}
int main()
{
    int m;
    while(cin>>str1>>m)
    {
        if(str1[0]=='-')
        {
            solve(str1+1,str2,10,m);
            cout<<"-"<<str2<<endl;
        }
        else
        {
            solve(str1,str2,10,m);
            cout<<str2<<endl;
        }
    }
}

發佈了4 篇原創文章 · 獲贊 22 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章