之乎者也 (解答)

这篇文章描述了一个编程问题,要求计算给定四个古文中常见语气词“之”、“乎”、“者”、“也”的总笔画数,通过ASCII码转换并累加每个字符的笔画数。
摘要由CSDN通过智能技术生成

之”、“乎”、“者”、“也”是四个古人常用的语气助词。蜗蜗最近迷上了古文和算数,他敏锐地发现,古人说话总是用到这些字,然后他就把一书架的文言文都拿出来数了一遍,发现“之”有 a个,“乎”有b个,“者”有c个,“也”有d个。他想统计一下这些“之乎者也”一共有多少个笔画,但因为数量级实在是太大,他算不出来,你能帮帮他吗?已知“之”“乎”“者”“也”分别有 33 画、 55 画、 88 画和 33 画。

输入格式
一共四行,每行一个正整数,依次为 a,b,c,d。

输出格式
一行, 一个正整数,表示总共的笔画。

样例输入1
51289340328432234322098421
128932487832936372898444
9999993843929349999994932949239
85764958671273673254673236362730031
样例输出1
257374876119085137988481053382571488

解答:

#include <bits/stdc++.h>
using namespace std;

int a[105];
int b[105];
int c[105];
int d[105];

int total[105];

char s[105];

int len_1;
int len_2;
int len_3;
int len_4;

int maxlen;
int maxlen_1;
int maxlen_2;

int main () {
    scanf("%s", s + 1);
    len_1 = strlen(s + 1);
    for (int i = 1; i <= len_1; i++) {
        a[i] = s[len_1 + 1 - i] - 48;
    }
    for (int i = 1; i <= len_1; i++) {
        a[i] *= 3;
    }
    for (int i = 1; i <= len_1; i++) {
        a[i + 1] += a[i] / 10;
        a[i] %= 10;
    }
    while (a[len_1 + 1] > 0) {
        len_1++;
        a[len_1 + 1] += a[len_1] / 10;
        a[len_1] %= 10;
    }
    if (a[len_1 + 1] > 0) {
        len_1++;
    }
    while (a[len_1] == 0 && len_1 > 1)
        len_1--;
    scanf("%s", s + 1);
    len_2 = strlen(s + 1);
    for (int i = 1; i <= len_2; i++) {
        b[i] = s[len_2 + 1 - i] - 48;
    }
    for (int i = 1; i <= len_2; i++) {
        b[i] *= 5;
    }
    for (int i = 1; i <= len_2; i++) {
        b[i + 1] += b[i] / 10;
        b[i] %= 10;
    }
    while (b[len_2 + 1] > 0) {
        len_2++;
        b[len_2 + 1] += b[len_2] / 10;
        b[len_2] %= 10;
    }
    if (b[len_2 + 1] > 0) {
        len_2++;
    }
    while (b[len_2] == 0 && len_2 > 1)
        len_2--;
    scanf("%s", s + 1);
    len_3 = strlen(s + 1);
    for (int i = 1; i <= len_3; i++) {
        c[i] = s[len_3 + 1 - i] - 48;
    }
    for (int i = 1; i <= len_3; i++) {
        c[i] *= 8;
    }
    for (int i = 1; i <= len_3; i++) {
        c[i + 1] += c[i] / 10;
        c[i] %= 10;
    }
    while (c[len_3 + 1] > 0) {
        len_3++;
        c[len_3 + 1] += c[len_3] / 10;
        c[len_3] %= 10;
    }
    if (c[len_3 + 1] > 0) {
        len_3++;
    }
    while (c[len_3] == 0 && len_3 > 1)
        len_3--;
    scanf("%s", s + 1);
    len_4 = strlen(s + 1);
    for (int i = 1; i <= len_4; i++) {
        d[i] = s[len_4 + 1 - i] - 48;
    }
    for (int i = 1; i <= len_4; i++) {
        d[i] *= 3;
    }
    for (int i = 1; i <= len_4; i++) {
        d[i + 1] += d[i] / 10;
        d[i] %= 10;
    }
    while (d[len_4 + 1] > 0) {
        len_4++;
        d[len_4 + 1] += d[len_4] / 10;
        d[len_4] %= 10;
    }
    if (d[len_4 + 1] > 0) {
        len_4++;
    }
    while (d[len_4] == 0 && len_4 > 1)
        len_4--;
    maxlen_1 = max(len_1, len_2);
    maxlen_2 = max(len_3, len_4);
    maxlen = max(maxlen_1, maxlen_2);
    for (int i = 1; i <= maxlen; i++) {
        total[i] += a[i];
        total[i] += b[i];
        total[i] += c[i];
        total[i] += d[i];
    }
    for (int i = 1; i <= maxlen; i++) {
        total[i + 1] += total[i] / 10;
        total[i] %= 10;
    }
    while (total[maxlen + 1] > 0) {
        maxlen++;
        total[maxlen + 1] += total[maxlen] / 10;
        total[maxlen] %= 10;
    }
    for (int i = maxlen; i >= 1; i--) {
        cout << total[i];
    }
    return 0;
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值