1016 部分A+B (15 分)

2019-09-09 16:01:48 浏览数 (1)

1016 部分A B (15 分)

正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。

现给定 ADABDB,请编写程序计算 PA PB

输入格式:

输入在一行中依次给出 ADABDB,中间以空格分隔,其中 0<A,B<1010。

输出格式:

在一行中输出 PA PB 的值。

输入样例 1:

代码语言:javascript复制
3862767 6 13530293 3

输出样例 1:

代码语言:javascript复制
399

输入样例 2:

代码语言:javascript复制
3862767 1 13530293 8

输出样例 2:

代码语言:javascript复制
0

思路

这个题目就比较简单了,思路也很清晰,统计出现次数,然后转换成n个1再与key相乘即可。

代码语言:javascript复制
// 1016 部分A B (15 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <sstream>
using namespace std;
stringstream ss;
//正数中某个数出现的个数
int count(int number, int key) {
    int count_value = 0;
    ss << number;
    string str = ss.str();
    ss.str("");
    ss << key;
    string key_str = ss.str();
    for (int i = 0; i < str.size(); i  ) {
        if (key_str[0] == str[i])
            count_value  ;
    }
    ss.str("");
    return count_value;
}

int main(){
    //输入
    int number_1;
    int key_number_1;
    int number_2;
    int key_number_2;
    cin >> number_1 >> key_number_1 >> number_2 >> key_number_2;
    //计算出现次数
    int count_1 = count(number_1, key_number_1);
    int count_2 = count(number_2, key_number_2);
    //计算 A 和 B
    int temp = 1;
    int A = 0;
    int B = 0;
    while (count_1) {
        A  = temp;
        temp *= 10;
        count_1--;
    }
    temp = 1;
    while (count_2) {
        B  = temp;
        temp *= 10;
        count_2--;
    }
    cout << A * key_number_1   B * key_number_2;
}

别人的实现

思路差不多,但比我简洁,主要是他把乘和求sum放在一起了。

代码语言:javascript复制
#include<string>
#include<iostream>

using namespace std;
#define ll long long 

ll px( string a, int da) {
    ll sum=0;
    for (int i = 0; i < a.length(); i  ) 
        if (a[i]-'0' == da) 
            sum = sum * 10   da;
    return sum;
}
int main() {
    string a, b;
    int da, db;
    cin >> a >> da >> b >> db;
    ll sum_a, sum_b;
    sum_a = px(a, da);
    sum_b = px(b, db);
    cout << sum_a   sum_b << endl;
    return 0;
}

0 人点赞