//====================================================================
// One of @C24zhengfujia's program
// Copyright (C) 2024 C24zhengfujia, All rights reserved.
// This file is posted on zxoj.net.
// This code is distributed in the hope that it will be useful,
// but DO NOT COPY ANYTHING; if you've been punished or been
// kicked out because you copied something. No people but YOU have to handle this issue.
// See zxoj.net or visit Ms He for more details.
/*
* This is one of @C24zhengfujia's program.
*/
//
// zxoj.net/d/ybtqm/blog/201/6707be64f2e492a8081ed04c#1728560740345 #Complete Conversion System,2024-10-10
//
//Signature:C24zhengfujia
//====================================================================
//====================================================================
// @C24zhengfujia的作品之一
// 版权所有(C)2024 C24zhengfujia,保留所有权利。
// 此文件发布在zxoj.net上。
// 分发此代码是希望它有用,
// 但不要复制任何东西;如果你受到了惩罚或
// 被开除是因为你抄袭了一些东西。除了你,没有人必须处理这个问题。
// 请访问zxoj.net或找何老师以获取更多详细信息。
/*
* 这是@C24zhengfujia的作品之一。
*/
//
// zxoj.net/d/ybtqm/blog/201/6707be64f2e492a8081ed04c#1728560740345 #全套转进制,2024-10-10
//
// 签字:C24zhengfujia
//====================================================================
#include<cstdio>
#include<cmath>
#include<cstring>
int n,m;
char ch[7]="ABCDEF",input[32];//char输出与接收高于10进制的数
void dec2m(int n,int m)//10进制转m进制
{
int x[32],i=0;//int二进制位最多31位,开32个元素的数组,i记录转换后位数
if(n<0)//判断负数
printf("-");//输出负号
n=abs(n);//保证进入转换前的数非负
do
{
x[i++]=n%m;//取余存入数组
n/=m;//除去一位数
}
while(n);//除到0为止
for(i-=1;i>=0;--i)//倒序输出
{
if(x[i]>=10)//超过10就输出字母
printf("%c",ch[x[i]%10]);
else
printf("%d",x[i]);//否则按原样输出
}
}
int m2dec(char n[],int m)//m进制转10进制(注意返回值为int,只会将结果返回给主函数,不会自己输出)(超过10进制会出现字母,因此用char数组接收)
{
bool fu=n[0]=='-';//判断是否负数
int x[32],factor=1,sum=0;//转换int二进制位最多31位,开32个元素的数组,factor做累乘器,sum存转换后的数
for(int i=strlen(n)-1;i>=0;--i)//倒序转换为int
{
if(n[i]>='A'&&n[i]<='F')//A~F字母转换为10~15
{
x[i]=n[i]-55/*x[i]=n[i]-65+10*/;
}
else if(n[i]>='0'&&n[i]<='9')//数字字符转换为相应的int
{
x[i]=n[i]-48;
}
else//其他字符看做0
x[i]=0;
}
for(int i=strlen(n)-1;i>=0;--i)//数学公式计算(sum=第一位*pow(m,0)+第二位*pow(m,1)+...+第n位*pow(m,n-1))
{
sum+=x[i]*factor;//加乘
factor*=m;//累乘
}
if(fu) sum=-sum;//负数则反转
return sum;//返回sum
}
int main()//下面自定
{
scanf("%s",input);
m2dec(input,8);
return 0;
}