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;
 }

猜你喜欢

转载自blog.csdn.net/qq_43397186/article/details/85768886