洛谷 P1143 进制转换

洛谷P1143 进制转换

本题题解为转载

题目描述

请你编一程序实现两种不同进制之间的数据转换。

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:  复制
16
FF
2
输出样例#1:  复制
11111111



#include
#include
#include
#include
using namespace std;
int n,m,l;                         //先把n进制转十进制,再把十进制转成m进制 
char njz[25],mjz[25];
int power(int n,int t)
{                                   //用来计算n进制下每一位的幂,从而转换成十进制
    int ans=1,i;
    for(i=0;i0)
	{
        if(sj%m<10)
            mjz[i]=sj%m+'0';
        else
            mjz[i]=sj%m-10+'A';//同上的特判,十六进制余11,11 11-10+‘A’为B 
        i++;
        sj/=m;
    }
    for(int j=i-1;j>=1;j--)  //此处没用栈,所以要从后往前输出
    putchar(mjz[j]);
}
int main()
{
    scanf("%d\n%s\n%d",&n,njz,&m);
    l=strlen(njz)-1;         //l就是n进制最高位的权
    szh();
    return 0;
}

栈处理

#include 
#include 
#include 
using namespace std;
int n,m;
void Conversion()
{
    stack si;
    while(n)
    {
        si.push(n%m);  //m是进制数,n是原来的数
        n=n/m;
    }
    while(!si.empty())
    {
        int t=si.top();
        si.pop();
        printf("%d",t);
    }
    printf("\n");
}
int main()
{
    scanf("%d",&n);
    scanf("%d",&m);
    Conversion();
    return 0;
}

你可能感兴趣的:(c++,栈)