洛谷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

先把一个数转换成十进制转换的时候用乘权累加法然后再转换成m进制转换的时候用不断取模法(xjb扯的) :joy:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define LL long long
using namespace std;
const int MAXN=1e6+10;
const int mod=1e9+7;
inline int read()
{
	char c=getchar();int flag=1,x=0;
	while(c<‘0‘||c>‘9‘)	{if(c==‘-‘)	flag=-1;c=getchar();}
	while(c>=‘0‘&&c<=‘9‘)	x=x*10+c-48,c=getchar();return x*flag;
}
int n,m;
char s[MAXN];
int a[MAXN],b[MAXN],tot=-1,ans=0,now=1;
int out[MAXN],cnt=0;
int main()
{
	for(int i=‘0‘;i<=‘9‘;i++)	a[i]=++tot,b[tot]=i;
	for(int i=‘A‘;i<=‘Z‘;i++)	a[i]=++tot,b[tot]=i;
	n=read();
	scanf("%s",s+1);m=read();
	int ls=strlen(s+1);
	for(int i=ls;i>=1;i--)	ans+=a[ s[i] ]*now,now=now*n;
	now=0;
	while(ans)		out[++cnt]=ans%m,ans/=m;
	for(int i=cnt;i>=1;i--)	printf("%c",b[ out[i] ]);
	return 0;
}

  

时间: 2024-11-09 15:10:05

洛谷P1143 进制转换的相关文章

洛谷——P1143 进制转换

P1143 进制转换 题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入输出格式 输入格式: 输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A-F表示数码10-15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16). 输出格式: 输出仅一行,包含一个正整数,表示转换之后的m进制数. 输入输出样例 输入样例#1: 复制 16 FF 2 输出

洛谷1017 进制转换

洛谷1017 进制转换 本题地址:http://www.luogu.org/problem/show?pid=1017 思路: 其实和普通的进制转换一样,只是要转换成负进制时,余数可能为负数.因此只要多加一个判断余数是否为负数,当余数为负数时,余数自减除数,商自增即可. 1 #include <cstdio> 2 #include <stack> 3 using namespace std; 4 void work(int n, int m) 5 { 6 int t; 7 stac

洛谷P1017 进制转换

P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1\times 10^2+2\times 10^1+3\times 10^01×10?2??+2×10?1??+3×10?0??这样的形式. 与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式.一般说来,任何一个正整数R或一个负整数-R都可以被选

[NOIP2000] 提高组 洛谷P1017 进制转换

题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^0这样的形式. 与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式.一般说来,任何一个正整数R或一个负整数-R都可以被选来作为一个数制系统的基数.如果是以R或-R为基数,则需要用到的数码为 0,1,....R-1.例如,当R=7时

数学方法模拟(洛谷1017 进制转换NOIp2000提高组第一题)

我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^0这样的形式. 与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式.一般说来,任何一个正整数R或一个负整数-R都可以被选来作为一个数制系统的基数.如果是以R或-R为基数,则需要用到的数码为 0,1,....R-1.例如,当R=7时,所需用到

洛谷 P1017 进制转换

题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 这样的形式. 与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式.一般说来,任何一个正整数R或一个负整数-R都可以被选来作为一个数制系统的基数.如果是以R或-R为基数,则需要用到的数码为 0,1,....R-1.例如,当R=7时,所需用到的数码是0,1,2,3,4,5

洛谷—— P1017 进制转换

https://www.luogu.org/problem/show?pid=1017#sub 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 这样的形式. 与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式.一般说来,任何一个正整数R或一个负整数-R都可以被选来作为一个数制系统的基数.如果是以R或-R为基数,则需

洛谷P1013 进制位

P1013 进制位 题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E KL KK E E KL KK KV 其含义为: L+L=L,L+K=K,L+V=V,L+E=E K+L=K,K+K=V,K+V=E,K+E=KL …… E+E=KV 根据这些规则可推导出:L=0,K=1,V=2,E=3 同时可以确定该表表示的是4进制加法 //感谢lxylxy123456同学为本

noip 1998 洛谷P1013 进制位

题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: L K V E L L K V E K K V E KL V V E KL KK E E KL KK KV 其含义为: L+L=L,L+K=K,L+V=V,L+E=E K+L=K,K+K=V,K+V=E,K+E=KL …… E+E=KV 根据这些规则可推导出:L=0,K=1,V=2,E=3 同时可以确定该表表示的是4进制加法 //感谢lxylxy123456同学为本题新加一组数据 输入输出