南邮 OJ 1504 进制转换
来源:互联网 发布:java异常处理关键字 编辑:程序博客网 时间:2024/06/05 14:31
进制转换
总提交 : 112 测试通过 : 29
比赛描述
Openxxx发现,我们所熟知十进制、二进制、十六进制都是一类很特殊的进制,其实进制有着更一般的情况。Openxxx发明了一种进制表示的通项公式:K~(a1,a2,……,ak-1,ak), 其中K代表进制的循环节长度,向量 (a1,a2,……,ak-1,ak) 是对循环节的描述。比如我们所熟知的十进制,二进制,十六进制可依次表示为 1~(10),1~(2)和1~(16),他们都属于循环节长度为1的进制。如果长度大于1会怎么样?不妨让我们观察一下进制2~(10,2)从0开始计数的情况:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,100?
为什么不是20呢?因为在此进制下第2位的位权是2,所以第2位上应该逢2进1。第3位呢?我们可以循环利用前面的位权,第3位就和第1位一样逢10进1,第4位就和第2位一样逢2进1,如此循环下去……
现在的问题是:给你两种不同的进制,请将原进制下的数转换成目标进制下的数。为了方便数的表达,我们用大写字母’A’~’Z’来代替10~35。
输入
多组测试数据,每组数据第1行输入两个正整数K1、K2,分别描述原进制和目标进制的循环节长度;第2行输入一串长度不超过30的字串(仅由 ’0’~’9’ 和’A’~’Z’ 构成),即原进制下的数。数据保证是合法的;第3行输入K1个正整数a1 ,…,ak1,第4行输入K2个正整数b1,…,bk2,分别描述原进制和目标进制的循环节。(1≤K1, K2≤10;2≤所有a, b≤36;0≤待转换的数≤2^30) 输入直至文件结尾。
输出
每组数据输出仅一行:转换后的目标数。
样例输入
1 1
8
10
2
2 2
ABC
16 15
14 13
样例输出
1000
102C
提示
题目来源
openxxx
/* Wrong Answer at Test 1#include<iostream>#define N 32int ow[N];//original weight原操作数对应的权重int on[N];//original number原操作数int tw[N];//target weight目的操作数对位的权重int tn[N];//target number目的操作数char temp[N];//存放接收到的数据int tempW[N];//每一位的权重//字符转化为数字,c[0]表示最高位,n[0]表示个位void charToNum(char *c,int *n,int len){int i;for(i=0;i<len;i++){if(c[i]>='0' && c[i]<='9'){n[len-1-i] = c[i]-'0';}else{n[len-1-i] = c[i]-'A'+10;}}}void numToChar(int *n,char *c,int len){int i;for(i=0;i<len;i++){if(n[i]<10){c[len-1-i] = n[i]+'0';}else{c[len-1-i] = n[i]-10+'A';}}c[len] = 0;}int main(){//freopen("test.txt","r",stdin);int K1,K2,i,oLen,tLen,r;while(scanf("%d%d",&K1,&K2)==2){scanf("%s",temp);oLen = strlen(temp);//原操作数的长度charToNum(temp,on,oLen);for(i=0;i<K1;i++){scanf("%d",&tempW[i]);}ow[0] = 1;for(i=1;i<N;i++){//会溢出,先不管ow[i] = ow[i-1]*tempW[(i-1)%K1];}//for(i=0;i<N;i++){//printf("%d\n",ow[i]);//}for(i=0;i<K2;i++){scanf("%d",&tempW[i]);}tw[0] = 1;for(i=1;i<N;i++){tw[i] = tw[i-1]*tempW[(i-1)%K2];}//for(i=0;i<N;i++){//printf("%d\n",tw[i]);//}r = 0;for(i=0;i<oLen;i++){r += on[i]*ow[i];}if(r==0){printf("0\n");}for(tLen=0;r>=tw[tLen];tLen++);tLen;for(i=tLen-1;i>=0;i--){tn[i] = r/tw[i];r %= tw[i];}numToChar(tn,temp,tLen);printf("%s\n",temp);}}*//* Presentation Error at Test 1#include<iostream>#define N 40__int64 ow[N];//original weight原操作数对应的权重__int64 on[N];//original number原操作数__int64 tw[N];//target weight目的操作数对位的权重__int64 tn[N];//target number目的操作数char temp[N];//存放接收到的数据__int64 tempW[N];//每一位的权重//字符转化为数字,c[0]表示最高位,n[0]表示个位void charToNum(char *c,__int64 *n,__int64 len){__int64 i;for(i=0;i<len;i++){if(c[i]>='0' && c[i]<='9'){n[len-1-i] = c[i]-'0';}else{n[len-1-i] = c[i]-'A'+10;}}}void numToChar(__int64 *n,char *c,__int64 len){__int64 i;for(i=0;i<len;i++){if(n[i]<10){c[len-1-i] = n[i]+'0';}else{c[len-1-i] = n[i]-10+'A';}}c[len] = 0;}int main(){//freopen("test.txt","r",stdin);__int64 K1,K2,i,oLen,tLen,r;while(scanf("%I64d%I64d",&K1,&K2)==2){scanf("%s",temp);oLen = strlen(temp);//原操作数的长度charToNum(temp,on,oLen);for(i=0;i<K1;i++){scanf("%I64d",&tempW[i]);}ow[0] = 1;for(i=1;i<N;i++){//会溢出,先不管ow[i] = ow[i-1]*tempW[(i-1)%K1];}//for(i=0;i<N;i++){//printf("%d\n",ow[i]);//}for(i=0;i<K2;i++){scanf("%I64d",&tempW[i]);}tw[0] = 1;for(i=1;i<N;i++){tw[i] = tw[i-1]*tempW[(i-1)%K2];}//for(i=0;i<N;i++){//printf("%d\n",tw[i]);//}r = 0;for(i=0;i<oLen;i++){r += on[i]*ow[i];}if(r==0){printf("0\n");}for(tLen=0;r>=tw[tLen];tLen++);tLen;for(i=tLen-1;i>=0;i--){tn[i] = r/tw[i];r %= tw[i];}numToChar(tn,temp,tLen);printf("%s\n",temp);}}*/#include<iostream>#define N 40__int64 ow[N];//original weight原操作数对应的权重__int64 on[N];//original number原操作数__int64 tw[N];//target weight目的操作数对位的权重__int64 tn[N];//target number目的操作数char temp[N];//存放接收到的数据__int64 tempW[N];//每一位的权重//字符转化为数字,c[0]表示最高位,n[0]表示个位void charToNum(char *c,__int64 *n,__int64 len){__int64 i;for(i=0;i<len;i++){if(c[i]>='0' && c[i]<='9'){n[len-1-i] = c[i]-'0';}else{n[len-1-i] = c[i]-'A'+10;}}}void numToChar(__int64 *n,char *c,__int64 len){__int64 i;for(i=0;i<len;i++){if(n[i]<10){c[len-1-i] = n[i]+'0';}else{c[len-1-i] = n[i]-10+'A';}}c[len] = 0;}int main(){//freopen("test.txt","r",stdin);__int64 K1,K2,i,oLen,tLen,r;while(scanf("%I64d%I64d",&K1,&K2)==2){scanf("%s",temp);oLen = strlen(temp);//原操作数的长度charToNum(temp,on,oLen);for(i=0;i<K1;i++){scanf("%I64d",&tempW[i]);}ow[0] = 1;for(i=1;i<N;i++){//会溢出,先不管ow[i] = ow[i-1]*tempW[(i-1)%K1];}//for(i=0;i<N;i++){//printf("%d\n",ow[i]);//}for(i=0;i<K2;i++){scanf("%I64d",&tempW[i]);}tw[0] = 1;for(i=1;i<N;i++){tw[i] = tw[i-1]*tempW[(i-1)%K2];}//for(i=0;i<N;i++){//printf("%d\n",tw[i]);//}r = 0;for(i=0;i<oLen;i++){r += on[i]*ow[i];}if(r==0){printf("0\n");continue;//PE1}for(tLen=0;r>=tw[tLen];tLen++);tLen;for(i=tLen-1;i>=0;i--){tn[i] = r/tw[i];r %= tw[i];}numToChar(tn,temp,tLen);printf("%s\n",temp);}}
- 南邮 OJ 1504 进制转换
- oj:进制转换
- 南邮 OJ 1012 进制转换
- 南邮OJ 1012进制转换
- 【华为oj】进制转换
- 华为oj 进制转换
- 【华为 OJ 】进制转换
- 【华为OJ】进制转换
- 华为OJ:进制转换
- 九度OJ 1080: 进制转换
- 九度OJ 1080 进制转换
- 九度OJ-1080:进制转换
- neuq oj 1011 进制转换C++
- 华为oj 进制转换&&质数因子
- 【华为OJ】【005-进制转换】
- 华为OJ——进制转换
- 华为OJ 初级:进制转换
- 九度OJ 1138 进制转换
- 南邮 OJ 1503 漏洞修复
- twisted中defer的关键用法
- poj-2049-Finding Nemo-BFS
- 详解Python中yield生成器的用法
- NSSegmentAndSlider
- 南邮 OJ 1504 进制转换
- UI04_Delegate
- android json解析使用总结(一)
- Uniform Generator
- eclipse中安装freemarker插件及ftl使用freemarker编辑器
- AnswersheetService
- 南邮 OJ 1506 选队长
- C#文件操作大全(SamWang)
- ncb文件