Skip to content

14008: 【原4008】丁姐点外卖

题目

题目描述

author: dzm 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4008

Description

有一天,丁姐做了一个很奇怪的梦。

所有人都变成了喵星人,当然她也不例外。她身上没有任何东西,只有一袋标记着字母的金币。原来这个星球上没有数字,只有a-z,二十六个英文字母。 丁姐是一个吃货,过了不久,她就饿了,于是她打开ele.miao准备点几份外卖。丁姐很聪明,当然变成喵星人后,她的智商没有受到影响。不过她却是一个很懒惰的人, 尤其是面对这奇怪的运算法则。

但是她发现了运算时的一些技巧,a对应了数字0,b对应了数字1…… z对应了数字25。

所以她想请聪明又勤劳的你帮她计算一下两份外卖的总价值。

Input Format

第一行:字符串a

第二行:字符串b

保证两个字符串全部由小写字母组成,并且没有'a'出现在整个字符串的最高位。字符串长度不超过100.

Output Format

两件物品的总价值

Sample Input

b
a

Sample Output

b

Sample Input

z
z

Sample Output

by

ligongzzz's solution

#include "iostream"
#include "cstring"
using namespace std;

int main() {
    char a[200], b[200];
    cin >> a >> b;
    char ans[200] = { 0 };
    for (int i = strlen(a)-1, j = strlen(b)-1,temp=0; i >= 0 || j >= 0 || temp != 0; i--, j--) {
        int n1 = i < 0 ? 0 : a[i] - 'a';
        int n2 = j < 0 ? 0 : b[j] - 'a';

        if (n1 + n2 + temp > 25) {
            ans[strlen(ans)] = 'a' + n1 + n2 + temp - 26;
            temp = 1;
        }
        else {
            ans[strlen(ans)] = 'a' + n1 + n2 + temp;
            temp = 0;
        }
    }

    //倒序输出
    for (int i = strlen(ans) - 1; i >= 0; i--)
        cout << ans[i];

    return 0;
}

Neight99's solution

#include <cstring>
#include <iostream>

using namespace std;

int main() {
    char a[110], b[110], c[220] = {'\0'}, cha, chb;
    int aLen, bLen, Len, temp, carry = 0;

    cin >> a >> b;
    aLen = strlen(a);
    bLen = strlen(b);
    if (aLen > bLen) {
        Len = aLen;
    } else {
        Len = bLen;
    }

    for (int i = 0; i < Len + 1; i++) {
        if (i < aLen) {
            cha = a[aLen - 1 - i];
        } else {
            cha = 'a';
        }

        if (i < bLen) {
            chb = b[bLen - 1 - i];
        } else {
            chb = 'a';
        }

        temp = cha - 'a' + chb - 'a' + carry;
        carry = 0;

        if (temp >= 26) {
            carry += 1;
            temp -= 26;
        }

        c[Len - i] = temp + 'a';
    }
    c[Len + 1] = '\0';

    if (c[0] == 'a') {
        cout << c + 1;
    } else {
        cout << c;
    }

    return 0;
}

yyong119's solution

#include <iostream>
#include <cstring>
using namespace std;

int a[105],b[105],c[105];
char p[105],q[105];
int i, length;

int main() {

    cin >> p >> q;
    for (i = 0; i <= strlen(p) - 1; ++i) a[strlen(p) - i] = int(p[i] - 'a');
    for (i = 0; i <= strlen(q) - 1; ++i) b[strlen(q) - i] = int(q[i] - 'a');
    if (strlen(p) >= strlen(q)) length = strlen(p);
        else length = strlen(q);
    for (i = 1; i <= length; ++i){
        c[i] += a[i] + b[i];
        c[i + 1] += c[i] / 26; c[i] = c[i] % 26;
    }
    if (c[length + 1]) length++;
    for (i = length; i >= 1; --i) cout << char('a' + c[i]);
    return 0;
}