ACM--26进制加法--HDOJ 2100--Lovekey--大数--字符串处理

HDOJ题目地址:传送门

Lovekey

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 7783    Accepted Submission(s): 2519

Problem Description

XYZ-26进制数是一个每位都是大写字母的数字。 A、B、C、…、X、Y、Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26进制数转化成是10进制的规则如下

A0A1A2A3…An-1 的每一位代表的数字为a0a1a2a3…an-1 ,则该XYZ-26进制数的10进制值就为

m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1

一天vivi忽然玩起了浪漫,要躲在学校的一个教室,让枫冰叶子去找,当然,她也知道枫冰叶子可不是路痴,于是找到了XYZ的小虾和水域浪子帮忙,他们会在vivi藏的教室的门口,分别写上一个XYZ-26进制数,分别为 a 和 b,并且在门锁上设置了密码。显然,只有找到密码才能打开锁,顺利进入教室。这组密码被XYZ的成员称为lovekey。庆幸的是,枫冰叶子知道lovekey是 a的10进制值与b的10进制值的和的XYZ-26进制形式。当然小虾和水域浪子也不想难为枫冰叶子,所以a 和 b 的位数都不会超过200位。

例如第一组测试数据

a = 0 * 26^5+0* 26^4+ 0* 26^3+ 0 *26^2 + 3*26 + 7 = 85

b = 1*26^2 + 2*26 + 4 = 732

则 a + b = 817 = BFL

Input

题目有多组测试数据。

每组测试数据包含两个值均为的XYZ-26进制数,每个数字的每位只包含大写字母,并且每个数字不超过200位。

Output

输出XYZ的lovekey,每组输出占一行。

Sample Input

AAAADH  BCE
DRW  UHD
D  AAAAA

Sample Output

BFL
XYZ
D

题解:就是26进制加法,跟大数相加差不多,操作开始的时候要对其,最后要将前导A清除

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main(){
    char a[210],b[210];
    while(scanf("%s%s",&a,&b)!=EOF){
        string sa=a,sb=b;
        int i;
        int len_a=sa.size();
        int len_b=sb.size();
        reverse(sa.begin(),sa.begin()+len_a);
        reverse(sb.begin(),sb.begin()+len_b);
        if(len_a>len_b){
            for(i=0;i<(len_a-len_b);i++){
                sb+='A';
            }
            len_b=len_a;
        }else{
            for(i=0;i<(len_b-len_a);i++){
                sa+='A';
            }
            len_a=len_b;
        }
        int temp;
        int re=0;
        string c="";
        for(i=0;i<len_a;i++){
            temp=((sa[i]-'A')+(sb[i]-'A')+re);
            if((temp/26)){
                re=1;
                c+=((temp%26)+'A');
            }else{
                re=0;
                c+=(temp+'A');
            }
        }
        if(re){
            c+='B';
        }
        reverse(c.begin(),c.begin()+c.size());
        int flag=1;
        for(i=0;i<c.size();i++){
            if(c[i]=='A'&&flag){

            }else{
                printf("%c",c[i]);
                flag=0;
            }
        }
        printf("\n");
    }
}
时间: 2024-10-05 23:26:47

ACM--26进制加法--HDOJ 2100--Lovekey--大数--字符串处理的相关文章

HDU 2100 Lovekey(26进制相加 数学啊)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2100 Problem Description XYZ-26进制数是一个每位都是大写字母的数字. A.B.C.-.X.Y.Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26进制数转化成是10进制的规则如下 A0A1A2A3-An-1 的每一位代表的数字为a0a1a2a3-an-1 ,则该XYZ-26进制数的10进制值就为 m = a0 * 26^(n-1) + a1 * 26^(n-2) +

HDU 2100 Lovekey 模拟26进制

Problem Description XYZ-26进制数是一个每位都是大写字母的数字. A.B.C.-.X.Y.Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26进制数转化成是10进制的规则如下 A0A1A2A3-An-1 的每一位代表的数字为a0a1a2a3-an-1 ,则该XYZ-26进制数的10进制值就为 m = a0 * 26^(n-1) + a1 * 26^(n-2) + - + an-3* 26^2 + an-2*26 + an-1 一天vivi忽然玩起了浪漫,要躲在学校

洛谷 P1604 B进制星球 高精度多进制加法

P1604 B进制星球 时空限制1s / 128MB 题目背景 进制题目,而且还是个计算器~~ 题目描述 话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球.因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数.星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们. 现在小Z希望你可以帮助他,编写实现B进制加法的程序. 输入输出格式 输入格式: 共3行第1行:一个十进制的整数,表示进制B.第2-3行:每行一个B

26进制(字母)转十进制算法

下面是一个26进制转十进制的算法,目的是将字母(A~Z)转化为十进制的数字.主要用途是为了解决使用phpExcel解析Excel表格的时候,在Excel表格中列是由字母表示的,而很多情况下我们需要了解到当前的列是哪一行,也就是列的行数.所以才有了此算法. function litterToNumber($lineTag) { $transfArray = array('A'=>1,'B'=>2,'C'=>3, 'D'=>4, 'E'=>5, 'F'=>6, 'G'=&g

HDU1720 A+B Coming (16进制加法)

16进制加法 1 #include<stdio.h> 2 int main() 3 { 4 int a,b; 5 while(scanf("%x %x",&a,&b)!=EOF) 6 { 7 printf("%d\n",a+b); 8 } 9 } HDU1720 A+B Coming (16进制加法),码迷,mamicode.com

N进制加法

我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表示N进制,然后给出两个数字的字符串,请算出其求和结果并输出,如果输入不能正常计算则输出-1. 说明: 1:数字的字符串其中包括0-9和a-z(表示10-35). 2:所有的输入和输出都只会是小写字母或数字,不存在

B进制加法(洛谷1604)

分析:码农题,照这模拟就行,高精度的B进制,注意字符串反转的技巧. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include &l

2016.1.26 进制转换

2016.1.26 二进制 1:二进制转8进制(3位为一组) (11001111.01111)2=(11 001 111.011 110)2=(317.36)8 1*21+1*20=3  1*20=1  1*22+1*21+1*20=7  1*21+1*20=3  1*22+1*21=6 2:二进制转10进制 (10110)2=(22)10 1*24+1*22+1*21=22 3:二进制转16进制(4位为一组) (11010110)2=(D6)16 1101=1*23+1*22+1*20=13=

36进制加法

36进制由0-9,a-z,共36个字符表示,最小为’0’, ‘0’.'9’对应十进制的09,‘a’.'z’对应十进制的1035 例如: '1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36进制正整数的和 如:按照加法规则,计算'1b' + '2x' = '48' 要求: 不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制 思路按照十进制的加法方法,满36向前进一位 public