SHU 414 - 字符串进制转换

题目链接:http://acmoj.shu.edu.cn/problem/414/

网上拉了个进制转换模板过来,因为数组开的太小一直WA,难受……

 1 #include<cstdio>
 2 #include<cstring>
 3 #define MAXN 10000
 4 int t[MAXN],A[MAXN],n;
 5 char OldData[MAXN],NewData[MAXN];  //转换前、后的数据
 6 int olds,news;                     //转换前、后的进制
 7 void trans()//调用方式:输入olds、news、OldData,然后调用trans(),输出NewData
 8 {
 9     int i,len,k;
10     len=strlen(OldData);
11     for(i=len;i>=0;i--) t[len-1-i] = OldData[i] - (OldData[i]<=‘9‘ ? 48 : (OldData[i]<‘a‘ ? 55 : 61));//将字符串转化成0~61
12     for(k=0;len;)
13     {
14         for(i=len;i>=1;i--)
15         {
16             t[i-1]+=t[i]%news*olds;
17             t[i]/=news;
18         }
19         A[k++]=t[0]%news;
20         t[0]/=news;
21         while(len>0 && !t[len-1]) len--;
22     }
23     NewData[k]=‘\0‘;
24     for(i=0;i<k;i++) NewData[k-1-i] = A[i] + (A[i]<10 ? ‘0‘ : (A[i]<36 ? 55 : 61));
25 }
26 int main()
27 {
28     //freopen("input.txt","r",stdin);
29     //freopen("output.txt","w",stdout);
30     olds=26;
31     while(scanf("%s",OldData)!=EOF)
32     {
33         scanf("%d",&news);
34         int len=strlen(OldData);
35         for(int i=0;i<len;i++)
36         {
37             if(OldData[i]>=‘a‘ && OldData[i]<=‘j‘) OldData[i]=OldData[i]-‘a‘+‘0‘;
38             else OldData[i]=OldData[i]-‘k‘+‘A‘;
39         }
40         trans();
41         printf("%s\n",NewData);
42     }
43 }
时间: 2024-10-25 00:39:27

SHU 414 - 字符串进制转换的相关文章

SHUoj 字符串进制转换

字符串进制转换 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:17   时间限制: 1000ms   内存限制: 128M 描述 Claire Redfield在龙之谷游戏的一次任务中获得了一个上了锁的宝箱,上面刻了一串由小写字母构成的字符串A和一个数字m  . 经过Claire长时间研究,他发现密码是和a  ,m  有关的.字符串A相当于一个26进制的数字,a  相当于0  ,b  相当于1  --.z  相当于25  .然后要将这个26进制的数转化成m

(数字类型,进制转换,字符串,列表)介绍和操作

数字类型 整型 用途:记录年龄.等级.号码等 定义方式如 age = 18 本质 # age = int(18) 整型只能存一个值而且是不可变类型 int()方法能将字符串转为整型 需要注意的是使用int只能转纯数字的字符串,有小数点也不行 浮点型 用途:记录身高.体重.薪资等 定义方式如 height= 185.1 本质 # height= float(185.1) 浮点型只能存一个值而且是不可变类型 float()方法能将字符串和整型转为浮点型 需要注意的是使用float方法只能转纯数字的字

c语言将字符串转成int,将int转成字符串。附带任意进制转换函数

在网上看到各种将字符串转成int,和int转成字符串的方法.我自己比较喜欢用的方法是下面的,记住模板就行,最开始我也老是记不住,找到规律,多用几遍就好了. 1.将字符串转成int char s[20] = "123456";   // 注如果此处不是数字字符串类型,如下面的字符串  12abc -->  12        ab12 --> 0 int a = 0; sscanf(s,"%d",&a);   // a = 123456   就得到

03 php 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换,算术运算,比较运算

03 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换, 算术运算,比较运算,逻辑运算,短路现象, 三目运算符,字符型运算: 数据类型 整体划分 标量类型: int, float, string, bool 复合类型: array,     object 特殊类型: null,     resouce 整数类型int, integer 3种整数表示法 十进制写法:123: $n1 = 123; 八进制写法: 0123 $n2 = 0123; 十六进制写法: 0x123 $n3

大数进制转换问题

在数据结构课关于栈的这一章中,我们都学过用"模2取余法"来将一个10进制数转换为一个二进制数,进而可以推广到"模n取余法",经其转换为n进制(n任意指定). 确实,这是一个很基础的题目,可你是否想过如果这个10进制数是一个大数(其位数可能上千位,此时用一般数据类型肯定是会溢出的),那么这个问题又如何来求解呢? 当然,也许你会说很简单嘛,自己写一个大数类(当然至少要写一个大数除法才行),或者你用的是Java这种现代化语言,就更轻松了,直接用BigInteger这样的大

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

进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最后再将负号补回来,我认为这种做法是不对的. 正确的做法是:考虑好按照16位(short)还是32位(int)抑或64位(long long),先求出二进制补码(这时候就正负数就统一了),将二进制数转换为十进制后在转换为其他进制(如果有小伙伴知道如何直接将二进制转换为任意进制的方法可以留言告诉我,不胜

QT 16进制 ASII &nbsp; 10进制 转换

 //16进制字符串转字节数组     static QByteArray HexStrToByteArray(QString str)     {         QByteArray senddata;  //发送数据         int hexdata,lowhexdata;         int hexdatalen = 0;         int len = str.length();  //求出发送字符传唱度         senddata.resize(len/2); /

【String与基本类型之间的转换】以及【进制转换】

1. 基本数据类型---->字符串类型: 方法一:使用连接一个空字符串,例如  基本数据类型+“” : 方法二:静态方法 String.valueOf(),具体有: String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 String.valueOf(char c) : 将 char 变量 c 转换成字符串 String.valueOf(char[] data) : 将 char 数组 data 转换成字符串 String.valueOf(char[]

Python内置函数进制转换的用法

使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns a