POJ1220(大数进制转换)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 4652 | Accepted: 2132 |
Description
{ 0-9,A-Z,a-z }
HINT: If you make a sequence of base conversions using the output of one conversion as the input to the next, when you get back to the original base, you should get the original number.
Input
Output
Sample Input
8
62 2 abcdefghiz
10 16 1234567890123456789012345678901234567890
16 35 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
35 23 333YMHOUE8JPLT7OX6K9FYCQ8A
23 49 946B9AA02MI37E3D3MMJ4G7BL2F05
49 61 1VbDkSIMJL3JjRgAdlUfcaWj
61 5 dl9MDSWqwHjDnToKcsWE1S
5 10 42104444441001414401221302402201233340311104212022133030
Sample Output
62 abcdefghiz
2 11011100000100010111110010010110011111001001100011010010001 10 1234567890123456789012345678901234567890
16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2 16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
35 333YMHOUE8JPLT7OX6K9FYCQ8A 35 333YMHOUE8JPLT7OX6K9FYCQ8A
23 946B9AA02MI37E3D3MMJ4G7BL2F05 23 946B9AA02MI37E3D3MMJ4G7BL2F05
49 1VbDkSIMJL3JjRgAdlUfcaWj 49 1VbDkSIMJL3JjRgAdlUfcaWj
61 dl9MDSWqwHjDnToKcsWE1S 61 dl9MDSWqwHjDnToKcsWE1S
5 42104444441001414401221302402201233340311104212022133030 5 42104444441001414401221302402201233340311104212022133030
10 1234567890123456789012345678901234567890
Source
/*
ID: LinKArftc
PROG: 1220.cpp
LANG: C++
*/ #include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <cstdio>
#include <string>
#include <utility>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define eps 1e-8
#define randin srand((unsigned int)time(NULL))
#define input freopen("input.txt","r",stdin)
#define debug(s) cout << "s = " << s << endl;
#define outstars cout << "*************" << endl;
const double PI = acos(-1.0);
const double e = exp(1.0);
const int inf = 0x3f3f3f3f;
const int INF = 0x7fffffff;
typedef long long ll; const int maxn = ;
char str[maxn];//输入字符串
int start[maxn], ans[maxn], res[maxn];//被除数,商,余数
int oldBase, newBase;//转换前后进制 //单个字符得到数字
int getNum(char c) {//这里的进制字符是先数字,后大写字母,后小写字母
if (c >= '' && c <= '') return c - '';//数字
if (c >= 'A' && c <= 'Z') return c - 'A' + ;//大写字母
return c - 'a' + ;
}
//数字得到字符
char getChar(int i) {
if (i >= && i <= ) return i + '';
if (i >= && i <= ) return i - + 'A';
return i - + 'a';
}
//把输入的字符串的各个数位还原成数字形式
void change() {
start[] = strlen(str);//数组的0位存的是数组长度
for (int i = ; i <= start[]; i ++) start[i] = getNum(str[i-]);
} void solve() {
memset(res, , sizeof(res));//余数位初始化为空
int y, i, j;
while (start[] >= ) {
y = ; i = ;
ans[] = start[];
while (i <= start[]) {
y = y * oldBase + start[i];
ans[i ++] = y / newBase;
y %= newBase;
}
res[++ res[]] = y;//这一轮得到的余数
i = ;//找下一轮商的起始处,去掉前面的0
while ((i <= ans[]) && (ans[i] == )) i ++;
memset(start, , sizeof(start));
for (j = i; j <= ans[]; j ++) start[++ start[]] = ans[j];
memset(ans, , sizeof(ans));
}
} void output() {//从高位到低位逆序输出
for (int i = res[]; i >= ; i --) printf("%c", getChar(res[i]));
printf("\n");
} int main() {
//input;
int T;
scanf("%d", &T);
while (T --) {
scanf("%d %d %s", &oldBase, &newBase, str);
printf("%d %s\n", oldBase, str);
change();
solve();
printf("%d ", newBase);
output();
printf("\n");
}
return ;
}
POJ1220(大数进制转换)的更多相关文章
- 大数进制转换 poj1220
普通的做法,大数除小数. 复杂度o( log(n)*log(n) ),其实就是位数的平方. NUMBER BASE CONVERSION Time Limit: 1000MS Memory Lim ...
- hdu-1877(大数+进制转换)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1877 思路:注意考虑0,0的情况. #include<iostream> #include ...
- 1030 大数进制转换(51Nod + JAVA)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1030 题目: 代码实现如下: import java.mat ...
- poj1220(短除法实现任意进制转换)
题目链接:https://vjudge.net/problem/POJ-1220 题意:给定a进制的大数s,将其转换为b进制.其中2<=a,b<=62. 题意:一般进制转换是以10进制为中 ...
- poj1220:高精度进制转换模板题
今天撸3708 一直奇怪的re 就先放下了,写这个题的过程中学习了一个高精度进制转换,用这个模板写了1220 记录一下: #include <iostream> #include < ...
- poj1220 (高精度任意进制转换)
http://poj.org/problem?id=1220 高精度任意进制转换 代码是从discuss里找到的,据说是maigo神牛写的. 超精简!! 我自己第一写的时候,还把n进制先转成10进制, ...
- 高精度进制转换(poj1220)
常规短除法原理 高精度进制转换是对于特别大的数字来说的,当数字特别大时,难以进行除法和取余的操作,此时通过字符串模拟的办法可以解决. #include <iostream> #includ ...
- poj2305-Basic remains(进制转换 + 大整数取模)
进制转换 + 大整数取模一,题意: 在b进制下,求p%m,再装换成b进制输出. 其中p为b进制大数1000位以内,m为b进制数9位以内二,思路: 1,以字符串的形式输入p,m; 2,转换:字符串-&g ...
- java se系列(二) 关键字、注释、常量、进制转换、变量、数据类型转换、运算符
1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. 1.2 常见的关键字 备注 ...
随机推荐
- 手动监控Windows端口
转载自http://blog.51cto.com/ywzhou/1579917 1.监控端口的几个主要Keys: net.tcp.listen[port] Checks if this port ...
- 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5
孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...
- 多文件上传 input 的multiple 属性
一.上传多张图片并且预览 HTML: <div class="container"> <label>请选择一个图像文件:</label> < ...
- hibernate 批量插入
Session session = sessionFactoryUpLowLimit.openSession(); session.beginTransaction(); for(int i=0 ;i ...
- HashMap和Hashtable的区别(转载)
转载声明:转载自原文http://www.importnew.com/7010.html HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是 ...
- Linux建立FTP服务器
http://blog.chinaunix.net/uid-20541719-id-1931116.html http://www.cnblogs.com/hnrainll/archive/2011/ ...
- JQuery实现的智能表单提示
实现一个类似如此效果的表单验证:
- 搭建Elasticsearch 5.4分布式集群
多机集群中的节点可以分为master nodes和data nodes,在配置文件中使用Zen发现(Zen discovery)机制来管理不同节点.Zen发现是ES自带的默认发现机制,使用多播发现其它 ...
- [洛谷P1317]低洼地
题目大意:一组数,分别表示地平线的高度变化.高度值为整数,相邻高度用直线连接.找出并统计有多少个可能积水的低洼地?(首尾都为0) 题解:求出其中都多少个不严格下降子段和不严格上升子段所夹的位置,即为答 ...
- Noip2016滚粗记QAQ
day1 t1 XBG #include<map> #include<cstdio> #include<string> #include<string.h&g ...