poj 1220(短除法)
http://poj.org/problem?id=1220
题意:进制转换,把a进制转换为b进制。
如果数据不大的话,那么这个题还是很简单的,但这个题就是数据范围太大,所以这里可以采用短除法来做。
关于短除法,就是把每一位(这里指的每一位是指个位十位之类的)除以要转换的进制的余数在乘以当前进制的值加到下一位去,当前位的值就为商,然后这样一直进行到最后一位(也就是个位)个位在对所须转换的进制在取模,那么这个模就是转换后的结果。多次重复,直到最后一位为0,从后往前看就是答案。
举个例子:50,要从十进制转换为二进制。
十位是5,个位是0,那么首先5/2商为2,余1
下一步就是1*10+0=10,然后个位就变成了10,然后10/2=5余0,0就是结果的个位,
然后下一步就是对25进行操作
2/2商1余0,那么十位就是1,个位就是0*10+5=5.
5/2商2余1,那么结果的十位就是1。
然后对12进行操作,十位是1,1/2商0余1,那么十位就为0了。
个位就是1*10+2=12.12/2商6余0,结果的百位就是0.
因为十位是0,所以只对个位进行操作了,6/2商3余0,千为就是0
3/2商1余1,万位为1.
1/2商0余1,十万位为1,所以50转换为二进制就是110010
#include <stdio.h>
#include <string.h>
#define l 600 int a,b,ans[l],tmp[l];
char c[l]; int main()
{
int n,k;
scanf("%d",&n);
while(n--)
{
memset(tmp,,sizeof(tmp));
memset(ans,,sizeof(ans));
memset(c,,sizeof(c));
scanf("%d%d%s",&a,&b,c);
int len=strlen(c);
for(int i=,m=len-;i<len;i++,m--){ //这里要注意,要把最低位放在tmp[0],因为始终是取最低位的余数为答案的。
if(c[m]>='A'&&c[m]<='Z'){
tmp[i]=c[m]-'A'+;
continue;
}
if(c[m]>='a'&&c[m]<='z'){
tmp[i]=c[m]-'a'+;
continue;
}
else {
tmp[i]=c[m]-'';
}
}
for(k=;len;){
for(int i=len-;i;i--) //这就是短除法。
{
tmp[i-]+=tmp[i]%b*a;
tmp[i]/=b;
}
ans[k++]=tmp[]%b;
tmp[]/=b;
for(;len>&&!tmp[len-];len--);
}
printf("%d %s\n%d ",a,c,b);
for(int i=k-;i>=;i--) //输出答案,逆序输出
{
if(ans[i]>=&&ans[i]<){
printf("%c",ans[i]-+'A');
continue;
}
if(ans[i]>=){
printf("%c",ans[i]-+'a');
}
else printf("%d",ans[i]);
}
printf("\n\n");
}
return ;
}
poj 1220(短除法)的更多相关文章
- POJ 1220 NUMBER BASE CONVERSION(较复杂的进制转换)
题目链接 题意 : 给你一个a进制的数串s,让你转化成b进制的输出. A = 10, B = 11, ..., Z = 35, a = 36, b = 37, ..., z = 61,0到9还是原来的 ...
- poj 1220 NUMBER BASE CONVERSION(短除法进制转换)
题目连接:1220 NUMBER BASE CONVERSION 题目大意:给出两个进制oldBase 和newBase, 以及以oldBase进制存在的数.要求将这个oldBase进制的数转换成ne ...
- Poj(1220),hash
题目链接:http://poj.org/problem?id=1200 这个题,我真是无限MLE,RE,WA,太伤心了,还是写一下吧.题意很简单(英语很好读),最后看了一下金海峰的思路.果然,应该是我 ...
- POJ 1220 高精度/进制转换
n进制转m进制,虽然知道短除法但是还是不太理解,看了代码理解一些了: 记住这个就好了: for(int k=0;l; ){ for(int i=l ; i>=1 ; i--){ num[i - ...
- (高精度运算4.7.26)POJ 1220 NUMBER BASE CONVERSION(高精度数的任意进制的转换——方法:ba1----->10进制----->ba2)
package com.njupt.acm; import java.math.BigInteger; import java.util.Scanner; public class POJ_1220_ ...
- poj 1220 NUMBER BASE CONVERSION
NUMBER BASE CONVERSION Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5976 Accepted: ...
- 高精度进位制转换,Poj(1220)
转自ACdream. #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXS ...
- POJ 1220 大数字的进制转换,偷下懒,用java
题意为进制转换,Java的大数类就像是作弊 import java.math.BigInteger; import java.util.Scanner; public class Main { pub ...
- java水题集
POJ - 1220 进制转换 import java.io.*; import java.util.*; import java.math.*; public class Main { public ...
随机推荐
- python 计算器的(正则匹配+递归)
经过2天的长时间的战斗,python计算器终于完成了. import re val="1-2*((60-30*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3 ...
- MySQL 中NULL和空值的区别
平时我们在使用MySQL的时候,对于MySQL中的NULL值和空值区别不能很好的理解.注意到NULL值是未知的,且占用空间,不走索引,DBA建议建表的时候最好设置字段是NOT NULL 来避免这种低效 ...
- lua 学习
尽管所有的脚本语言在特定领域都有自己的一席之地,但在游戏开发的世界里,Python 和 Lua 是非常适合的,因为它们可以直接调用C++的功能. lua最让人惊喜的地方应该是它的执行速度,目前没有任何 ...
- Java中Office(word/ppt/excel)转换成HTML实现
运行条件:JDK + jacob.jar + jacob.dll 1) 把jacob.dll在 JAVA_HOME\bin\ 和 JAVA_HOME\jre\bin\ 以及C:\WINDOWS\sys ...
- 希望各位博友能对我的自我介绍提出意见(要面试IBM的应用开发工程师,本科应届生一枚)
面试官你好,首先我非常高兴能参加今天的面试. 我叫XXX(我名字里面有光宗耀祖),也许父母希望我光宗耀祖吧,所以给我起这样的名字.我的家乡山西太原,本科就读于XX大学,专业是信息与计算科学. 我今天要 ...
- [百度地图] MultiZMap 修改使用;
MultiZMap修改说明 MultiZMap 是基于百度地图API 封装的一些常用功能类库:主要以prototype方式实现:并且实现了一些辅助的功能,比如添加 Marker 功能,事件管理等: 以 ...
- AngularJS API之equal比较对象
使用情况 1 首先,所有满足 a === 3 这种的对象,在angular.equals(a,b)中都会返回真 2 所有对象的类型,以及属性值都相同的,也会返回真 3 NaN和NaN也会返回真(在ja ...
- ELK日志分析系统(转)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://467754239.blog.51cto.com/4878013/1700828 ...
- 清北学堂模拟day4 传球接力
[问题描述]n 个小朋友在玩传球. 小朋友们用 1 到 n 的正整数编号. 每个小朋友有一个固定的传球对象,第 i 个小朋友在接到球后会将球传给第 ai个小朋友, 并且第 i 个小朋友与第 ai个小朋 ...
- js操作json与字符串相互转换
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); var obj = strJSON.parseJSON(); var obj = JSON.pars ...