题目链接: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. Django+BootstrapTable实现表格分页

    models.py: from django.db import models # Create your models here. class Article(models.Model): titl ...

  2. 【leetcode】801. Minimum Swaps To Make Sequences Increasing

    题目如下: We have two integer sequences A and B of the same non-zero length. We are allowed to swap elem ...

  3. jquery的checked

    目前使用的jQuery版本为 v1.11.2 jquery判断checked的三种方法: .attr('checked'):   //看版本1.6+返回:"checked"或&qu ...

  4. BZOJ 3173: [Tjoi2013]最长上升子序列 Splay

    一眼切~ 重点是按照 $1$~$n$ 的顺序插入每一个数,这样的话就简单了. #include <cstdio> #include <algorithm> #define N ...

  5. 51 Nod 1066 Bash游戏

    1066 Bash游戏  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到 ...

  6. #4 div1E Parentheses 括号匹配

    E - Parentheses Time Limit:2000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Subm ...

  7. BZOJ 3456 城市规划 (组合计数、DP、FFT)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3456 著名的多项式练习题,做法也很多,终于切掉了纪念 首先求一波递推式: 令\(F(n ...

  8. 动态数组C语言实现

    /* * DynamicArray.h * * Created on: 2019年7月22日 * Author: Jarvis */ #ifndef SRC_DYNAMICARRAY_H_ #defi ...

  9. JavaScript Thread.Sleep()

    What is the JavaScript version of sleep()? Since 2009 when this question was asked, JavaScript has e ...

  10. SecureCRT For Mac安装、破解、使用详细总结

    转:https://blog.csdn.net/so_geili/article/details/83315852#_4 https://www.sednax.com/download.php