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 ...
随机推荐
- 处理离散型特征和连续型特征共存的情况 归一化 论述了对离散特征进行one-hot编码的意义
转发:https://blog.csdn.net/lujiandong1/article/details/49448051 处理离散型特征和连续型特征并存的情况,如何做归一化.参考博客进行了总结:ht ...
- STM32使用HAL库,使用延时卡死的问题。
之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题.发现我使用库里的延时程序HAL_Delay()时,会卡死在里面. 根据程序,进入到这个延时程序后 ,发现HAL_GetTick ...
- HEOI2016/TJOI2016 字符串问题
题目链接:戳我 非常不好意思,因为想要排版,所以今天先只把代码贴出来,明天补题解. 40pts暴力:直接暴力匹配 #include<iostream> #include<cstrin ...
- java取小数点后两位
package com.yonyou.sud.algorithm; import java.math.BigDecimal;import java.text.DecimalFormat;/*** ja ...
- python实战,
1.把日志状态码为200得请求记录下来 记录信息(ip,访问时间,请求资源) 封装函数再次调用,健壮性try except #coding=utf-8import redef aclog(path, ...
- java学期总结
第一周https://www.cnblogs.com/sqhe2000/p/11482760.html. 第二周https://www.cnblogs.com/sqhe2000/p/11521023. ...
- 【Spark机器学习速成宝典】模型篇05决策树【Decision Tree】(Python版)
目录 决策树原理 决策树代码(Spark Python) 决策树原理 详见博文:http://www.cnblogs.com/itmorn/p/7918797.html 返回目录 决策树代码(Spar ...
- hdjs---1、hdjs爬坑杂记
hdjs---1.hdjs爬坑杂记 一.总结 一句话总结: 对hdjs这种文档和完善都不是很好的插件,应该先在项目的空页面试,成功后再用到用了框架的项目中 1.hdjs4.0.18引入select2? ...
- Vs2019+openjdk12 本地Debug环境搭建过程
1. VS2019下载和安装 这个就不写了 2. cygwin安装: https://jingyan.baidu.com/article/455a99507c0b78a166277809.html 需 ...
- python异常处理--try except else raise finally
转载自https://www.cnblogs.com/bokeyuan11/p/9146607.html 写程序时遇到异常情况,程序可能无法正常运行.此时就需要引入异常处理 1.try ...exce ...