1. 程式人生 > >Problem 07. 進位制轉化問題

Problem 07. 進位制轉化問題

Problem 07. 進位制轉化問題

題目簡述:

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

解題思路:

先將十進位制數不斷除R取餘並放入陣列中,第一個得到的餘數是最高位,所以逆序輸出,再加上正負號判斷即可。

細節處理:

    當R大於10時,我們會發現10,11,12…應該輸出A,B,C…,這時我們應該使用條件語句判斷然後輸出。

原始碼:

#include<iostream>
#include<cstdio>
using namespace std;
int a[101];
int main()
{
    int N,R,b,flag;
    while(cin>>N>>R)
    {
        b=0;
        flag=0;
        if(N<0)
        {
            flag=1;
            N=-N;
        }
        for(int i=0;N>0;i++)//不斷除R取餘
        {
            a[i]=N%R;
            N=N/R;
            b++;
        }
        if(flag==1) cout<<"-";//當十進位制數為負的時,先輸出負號
        for(int j=b-1;j>=0;j--)
        {
            if(a[j]==10) cout<<'A';//條件語句判斷餘數是否大於0
            else if(a[j]==11) cout<<'B';
            else if(a[j]==12) cout<<'C';
            else if(a[j]==13) cout<<'D';
            else if(a[j]==14) cout<<'E';
            else if(a[j]==15) cout<<'F';
            else cout<<a[j];
        }
        cout<<endl;
    }
    return 0;
}

相似題目:Sky數

一個十進位制的四位數(Sky),其十進位制各位數之和等於其十六進位制各位數之和等於其十二進位制各位數之和,判斷一個四位數是否為Sky數。

原始碼:

#include<iostream>
using namespace std;
int main()
{
    int n,sum1,sum2,sum3,m,j,k;
    while(cin>>n)
    {
        k=n;
        if(n==0) break;
        else
        {
            sum1=0;
            sum2=0;
            sum3=0;
            m=n;
            j=n;
            for(int i=0;i<4;i++)
            {
                sum1+=n%10;
                n/=10;
            }
            for(int i=0;m>0;i++)
            {
                sum2+=m%16;
                m/=16;
            }
            for(int i=0;j>0;i++)
            {
                sum3+=j%12;
                j/=12;
            }
        }
        if(sum1==sum2&&sum1==sum3) cout<<k<<" "<<"is a Sky Number."<<endl;
        else cout<<k<<" "<<"is not a Sky Number."<<endl;
 }