poj1220(短除法实现任意进制转换)
题目链接:https://vjudge.net/problem/POJ-1220
题意:给定a进制的大数s,将其转换为b进制。其中2<=a,b<=62。
题意:一般进制转换是以10进制为中介进行转换,但这里的s太大了,大概10^500,如果要转换十进制来算必须要手写高精度模板或者用Java的API。这里我用的短除法,复杂度比较小。原理大致是将s每次除以b,得到的余数的逆序列是b进制表示的结果。每次除的时候用到同余模定理,即从最高位开始除,得到的余数乘以a加到下一位,一直到最低位。
AC代码:
#include<cstdio>
#include<cstring>
using namespace std; int a,b,T,t1[],t2[];
char s[]; int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%s",&a,&b,s);
int len=strlen(s);
for(int i=;i<len;++i){
if(s[i]>='A'&&s[i]<='Z') t1[len--i]=s[i]-'A'+;
else if(s[i]>='a'&&s[i]<='z') t1[len--i]=s[i]-'a'+;
else t1[len--i]=s[i]-'';
}
int k=;
while(len){
for(int i=len-;i>;--i){
t1[i-]+=t1[i]%b*a;
t1[i]/=b;
}
t2[k++]=t1[]%b;
t1[]/=b;
while(len&&!t1[len-]) --len;
}
printf("%d %s\n%d ",a,s,b);
for(int i=k-;i>=;--i){
if(t2[i]>=&&t2[i]<=) printf("%d",t2[i]);
else if(t2[i]>=&&t2[i]<=) printf("%c",t2[i]-+'A');
else printf("%c",t2[i]-+'a');
}
printf("\n\n");
}
return ;
}
附上Java代码(219ms,4528KB):
import java.io.*;
import java.math.*;
import java.util.*; public class Main{
public static void main(String args[]){
Scanner cin=new Scanner(System.in);
int T;
BigInteger a,b,sum;
T=cin.nextInt();
while((T--)!=0){
a=cin.nextBigInteger();
b=cin.nextBigInteger();
String s=cin.next();
sum=BigInteger.valueOf(0);
for(int i=0;i<s.length();++i){
char c=s.charAt(i);
int tmp;
if(c>='0'&&c<='9') tmp=c-'0';
else if(c>='A'&&c<='Z') tmp=c-'A'+10;
else tmp=c-'a'+36;
sum=sum.multiply(a);
sum=sum.add(BigInteger.valueOf(tmp));
}
BigInteger zero=BigInteger.valueOf(0);
int ans[]=new int[1005];
int k=0;
while(sum.compareTo(zero)!=0){
ans[k++]=sum.mod(b).intValue();
sum=sum.divide(b);
}
System.out.print(a+" "+s+"\n"+b+" ");
if(k==0) System.out.print(0); //注意为0的情况
for(int i=k-1;i>=0;--i){
int tmp=ans[i];
char c;
if(tmp<=9) c=(char)('0'+tmp);
else if(tmp<=35) c=(char)('A'+tmp-10);
else c=(char)('a'+tmp-36);
System.out.print(c);
}
System.out.print("\n\n");
}
}
}
poj1220(短除法实现任意进制转换)的更多相关文章
- poj1220 (高精度任意进制转换)
http://poj.org/problem?id=1220 高精度任意进制转换 代码是从discuss里找到的,据说是maigo神牛写的. 超精简!! 我自己第一写的时候,还把n进制先转成10进制, ...
- python任意进制转换
python任意进制转换 import string def module_n_converter(q, s, base=None): """ 将自然数按照给定的字符串转 ...
- Python版任意进制转换
def decimalToAny(num,n): baseStr = {10:"a",11:"b",12:"c",13:"d&qu ...
- 2~62位任意进制转换(c++)
进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最 ...
- 【C/C++】任意进制转换
进制转换:R进制->10进制:10进制->R进制. #include<bits/stdc++.h> using namespace std; /*函数:r进制转换成10进制*/ ...
- itoa()、atoi()、任意进制转换
头文件:<stdlib.h> itoa --功能:将任意类型的数字转换为字符串.在<stdlib.h>中与之有相反功能的函数是atoi. atoi----功 能: 将字符串转换 ...
- (任意进制转换)将 r 进制数转成 k 进制数
我们知道任意进制转换为十进制,都是乘以基数的多少次方,然后相加: 十进制转换为任意进制,都是除以基数,然后倒着取余数: 所以这里是用十进制数中转,实现任意进制数的转换 #include<iost ...
- lua之m进制转换为n进制-任意进制转换算法
够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 --数组倒序排列 local function orderByDesc( input ) local output ...
- 在线任意进制转换工具 - aTool在线工具
http://www.atool.org/hexconvert.php ss = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ ...
随机推荐
- Harbor ($docker login) Error saving credentials
$ sudo apt-get install $ sudo apt-get install gnupg2 pass 问题解决!
- CDOJ 图论专题 A.不是图论 强连通分量+拓扑排序 经典
题目链接 在其中纠错第一次wa代码 #include <cstdio> #include <cstring> #include <cstdlib> #includ ...
- k8s中flannel:镜像下载不了
重新部署一套K8S集群时,由于K8S需要扁平化的网络,所以当执行下面的 root@master ~]# kubectl apply -f kube-flannel.yml 会开始下载镜像,然后去启动, ...
- 【UTR #3】量子破碎
一道有趣的题. 看到按位的矩阵运算,如果对FWT比较熟悉的话,会比较容易地想到. 这种形式也就FWT等转移里面有吧--就算有其他的也难构造出来. 然而FWT的矩阵并不是酉矩阵(也就是满足 \(AA^T ...
- AtCoder AGC032D Rotation Sort (DP)
题目链接 https://atcoder.jp/contests/agc032/tasks/agc032_d 题解 又是一道神仙题啊啊啊啊...atcoder题真的做不来啊QAQ 第一步又是神仙转化: ...
- codefroces Round #201.B--Fixed Points
B. Fixed Points time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- js创建对象的6种方式总结
1.new 操作符 + Object 创建对象 var person = new Object(); person.name = "lisi"; person.age = 21; ...
- python3笔记九:python数据类型-String字符串
一:学习内容 字符串概念 字符串运算 字符串函数:eval().len().lower().upper().swapcase().capitalize().title().center().ljust ...
- docker top 和 docker exec ps 命令查看的PID区别
区别在于 docker top 查看到的 PID 属于宿主机的 PID.我们可以通过 宿主机执行 ps -ef 查看结果 也可以进去容器执行 top 和 ps查看结果
- [Flask]使用sqlite数据库
app.py from flask import Flask from flask_sqlalchemy import SQLAlchemy import os basedir = os.path.a ...