進位制轉化 10-->(2-16)

power_to_go發表於2016-08-06
進位制轉換
Time Limit: 1000ms Memory limit: 65536K 有疑問?點這裡^_^
題目描述
輸入一個十進位制數N,將它轉換成R進位制數輸出。
輸入
輸入資料包含多個測試例項,每個測試例項包含兩個整數N(32位整數)和R(2<=R<=16, R != 10)。
輸出
為每個測試例項輸出轉換後的數,每個輸出佔一行。如果R大於10,則對應的數字規則參考16進位制(比如,10用A表示,等等)。
示例輸入
7 2
23 12
-4 3
示例輸出
111
1B
-11
//# include <stdio.h>
# include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[100];
    int N,R;
    int mod,remainder;
    int top,i;
    bool flag;
   // while(scanf("%d%d",&N,&R))   1010ms
    while(cin>>N>>R)
    {
        top = 0;
        flag = true;
        if(N < 0)
        {
            flag = false;
            N = -N;
        }
        if(N == 0)
        {
            printf("0\n");
            continue;
        }
        while(N)
        {
            remainder = N % R;
            if(remainder >= 10)
                a[top++] = remainder + 55;// 轉化為對應的字母  65 A
            else
                a[top++] = remainder;
            N = N / R;
        }
         if(!flag)
                printf("-");
        for(i = top - 1; i >= 0;i--)
        {
            if(i)
            {
                if(a[i] > 10)
                    printf("%c",a[i]);
                else
                    printf("%d",a[i]);
            }
            else
            {
                if(a[i] > 10)
                    printf("%c\n",a[i]);
                else
                    printf("%d\n",a[i]);
            }
        }
    }
}

相關文章