进制转换

题目描述
乐乐正在学进制转换,但他老是搞不清楚到底自己是否做对,请你编一程序实现两种不同进制之间的数据转换,帮他检验。

输入
共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。

输出
仅一行,包含一个正整数,表示转换之后的m进制数。

样例输入
复制样例数据
16
FF
2
样例输出
11111111

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int k(int n,int y)
{
    int i=0,kk=1;
    for(i=0;i<y;i++)
    {
        kk=kk*n;
    }
    return kk;
}
int fun(char a[],int n,int len)
{
    int i,x,s=0,y=0;
    for(i=len-1;i>=0;i--)
    {
        if(a[i]>='A'&&a[i]<='F')
        {
            x=a[i]-'A'+10;
        }
        else
        {
            x=a[i]-'0';
        }
        int kk=k(n,y);
        s=s+x*kk;
        y++;
    }
    return s;
}
void fun1(int s,int m)
{
    int i,t,x=0;
    char a[100];
    while(s>0)
    {
       t=s%m;
       s/=m;
       if(t==1)
       {
           a[x++]='1';
       }
       else if(t==0)
        a[x++]='0';
       else if(t==2)
        a[x++]='2';
       else if(t==3)
        a[x++]='3';
        else if(t==4)
        a[x++]='4';
        else if(t==5)
        a[x++]='5';
        else if(t==6)
        a[x++]='6';
        else if(t==7)
        a[x++]='7';
        else if(t==8)
        a[x++]='8';
        else if(t==9)
        a[x++]='9';
       else if(t==10)
       {
           a[x++]='A';
       }
       else if(t==11)
       {
           a[x++]='B';
       }
       else if(t==12)
       {
           a[x++]='C';
       }
       else if(t==13)
       {
           a[x++]='D';
       }
       else if(t==14)
       {
           a[x++]='E';
       }
       else if(t==15)
       {
           a[x++]='F';
       }

    }
    for(i=x-1;i>=0;i--)
    {
        printf("%c",a[i]);
    }
    printf("\n");
}
int main()
{
    int n,m;
    char a[200];
    scanf("%d %s %d",&n,a,&m);
    int len=strlen(a);
    int s=fun(a,n,len);
    fun1(s,m);
    return 0;
}

不要用pow函数,double型有误差

posted on 2018-12-09 19:58  湫叶  阅读(172)  评论(0编辑  收藏  举报

导航