题目链接: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(短除法实现任意进制转换)的更多相关文章

  1. poj1220 (高精度任意进制转换)

    http://poj.org/problem?id=1220 高精度任意进制转换 代码是从discuss里找到的,据说是maigo神牛写的. 超精简!! 我自己第一写的时候,还把n进制先转成10进制, ...

  2. python任意进制转换

    python任意进制转换 import string def module_n_converter(q, s, base=None): """ 将自然数按照给定的字符串转 ...

  3. Python版任意进制转换

    def decimalToAny(num,n): baseStr = {10:"a",11:"b",12:"c",13:"d&qu ...

  4. 2~62位任意进制转换(c++)

    进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最 ...

  5. 【C/C++】任意进制转换

    进制转换:R进制->10进制:10进制->R进制. #include<bits/stdc++.h> using namespace std; /*函数:r进制转换成10进制*/ ...

  6. itoa()、atoi()、任意进制转换

    头文件:<stdlib.h> itoa --功能:将任意类型的数字转换为字符串.在<stdlib.h>中与之有相反功能的函数是atoi. atoi----功 能: 将字符串转换 ...

  7. (任意进制转换)将 r 进制数转成 k 进制数

    我们知道任意进制转换为十进制,都是乘以基数的多少次方,然后相加: 十进制转换为任意进制,都是除以基数,然后倒着取余数: 所以这里是用十进制数中转,实现任意进制数的转换 #include<iost ...

  8. lua之m进制转换为n进制-任意进制转换算法

    够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 --数组倒序排列 local function orderByDesc( input ) local output ...

  9. 在线任意进制转换工具 - aTool在线工具

    http://www.atool.org/hexconvert.php ss = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ ...

随机推荐

  1. HTTP 请求出现 405 not allowed 的一种解决办法

    问题:http post请求网页会出现405 原因: Apache.IIS.Nginx等绝大多数web服务器,都不允许静态文件响应POST请求 解决:将post请求改为get请求

  2. [LibreOJ 3119]【CTS2019】随机立方体【计数】【容斥】

    Description Solution 记\(N=min(n,m,l)\) 首先考虑容斥,记\(f(i)\)为至少有i个位置是极大的,显然极大的位置数上界是N. 那么显然\(Ans=\sum\lim ...

  3. ZOJ3649 Social Net

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3649 这题倍增维护信息之多,也能算是一道毒瘤题了-- 解题思路 ...

  4. Unity3D_(插件)使用Camera渲染制作Minimap小地图

    制作小地图:使用Camera渲染出来Render Texture 原理:使用摄像机从上到下获得场景游戏物体,摄像机Culling Mask渲染层级可设置是否需要在小地图上展示游戏物体,将摄像机获得的场 ...

  5. 使用 SpringBoot+Dubbo 搭建一个简单分布式服务

    实战之前,先来看几个重要的概念 开始实战之前,我们先来简单的了解一下这样几个概念:Dubbo.RPC.分布式.由于本文的目的是带大家使用SpringBoot+Dubbo 搭建一个简单的分布式服务,所以 ...

  6. Java中for each与正常for循环效率对比

    循环ArrayList时,普通for循环比foreach循环花费的时间要少一点:循环LinkList时,普通for循环比foreach循环花费的时间要多很多. 当我将循环次数提升到一百万次的时候,循环 ...

  7. Linux常用命令及操作

    shutdown -r now现在重启 shutdown -h now现在关机 reboot重启 startx进入图形界面 chmod +x 777 文件名 授权和可执行 777为二进制111-111 ...

  8. Error:Connection activation failed: No suitable device found for this connection

    原文链接: https://blog.csdn.net/baiboya/article/details/80452822 ens33这个网卡一直无法激活,在网上找了半天,找到这个博主的文章,才解决,虽 ...

  9. crossdomain.xml解决跨域问题

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  10. SpringMVC详解一、@RequestMapping注解与Controller接收参数

    SpringMVC详解一.@RequestMapping注解与Controller接收参数 https://blog.csdn.net/mxcsdn/article/details/80719258 ...