PAT 部分A+B

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

现给定A,D,B,D,请编写程序计算P+PB。

输入格式:

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

输出格式:

在一行中输出PA+PB的值。

输入样例 1:

3862767 6 13530293 3

输出样例 1:

399

输入样例 2:

3862767 1 13530293 8

输出样例 2:

0
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int jc(int n){
    if(n==0){
        return 1;
    }
    int x=1,i=0;
    for(;i<n;i++){
        x=x*10;
    }
    return x;
}
int main()
{
    string a,b;
    int c,d;
    cin>>a>>c>>b>>d;
    int n=0,i=0,m=0;
    int le=a.length(),ln=b.length();
    for(i=0;i<le;i++){
        if((a[i]-'0')==c)
        {

            m=m+c*jc(n);
            n+=1;
        }
    }
    n=0;
    int x=0;
    for(i=0;i<ln;i++){
        if((b[i]-'0')==d)
        {

            x=x+d*jc(n);
            n+=1;
        }
    }
    printf("%d\n",m+x);
    return 0;
}

C++版的确实效率够高,4 ms时间足够,但是它代码量确实大啊

a,b,c,d=input().split()
e,f=0,0
for i in range(len(a)):
    if a[i]==b:
        e+=1
for i in range(len(c)):
    if c[i]==d:
        f+=1
g,h=0,0
for i in range(e):
    g+=int(b)*10**i
for i in range(f):
    h+=int(d)*10**i
print(g+h)

同样的思路,Python的代码量就是C++的1/3了,但是效率和占用内存就惨不忍睹了,各有千秋。看来确实没有最好的语言,只有最适合的语言!

posted @ 2020-04-04 16:49  极限之旅  阅读(162)  评论(0编辑  收藏  举报