1006部分A+B

正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
 
 现给定A、DA、B、DB,请编写程序计算PA + PB。

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
 
int dec(int num,int n){
    int a=0;
    for(int i=0;i<n;i++){
        a=a*10+num;
    }
    return a;
}
  
int main(){
    //freopen("in.in","r",stdin);
    int a,b,pa,pb,count,da,db;
    while(scanf("%d %d %d %d",&a,&da,&b,&db)!=EOF){
        string a1=to_string(a),b1=to_string(b);
        //数字转字符串
        char ca,cb;
        ca=da+'0';
        cb=db+'0';
        for(int i=0;i<a1.length();i++){
            if(a1[i]==ca)count++;
        }
        pa=dec(da,count);
        count=0;
        for(int i=0;i<b1.length();i++){
            if(b1[i]==cb)count++;
        }
        pb=dec(db,count);
        printf("%d",pa+pb);
    }
     
    return 0;
}

思路:对于一串数字中需要将数字拆出一个一个单独判断,我首先想到将数字当作字符串读入,然后利用字符串的特性和自身方法判断字符串中字符是否和所给的字符相同,计算相同的个数count,直接利用count当作后来结果十进制数字的位数,传入方法中计算十进制数字的结果,让他们相加。看起来很简单,但是在读取数字的时候遇到的困难

困难:

1.字符串分行读取容易,但是同行输入困难,因为空格也会被当作字符读取,

解决方法:将字符串首先当作数字读取,后面转字符串

2. 字符比较需要将后面所给的DA和DB数字转为字符才能比较的吧,所以这也需要自己动手转变

//数字转字符串
        char ca,cb;
        ca=da+'0';
        cb=db+'0';

3.获取十进制数字的方法模板需要背一下,

 
int dec(int num,int n){
    int a=0;
    for(int i=0;i<n;i++){
        a=a*10+num;
    }
    return a;
}

以上就是我基于个人想法完成的题目

下面看看神仙大佬们解题思路

方法一:

cin输入好像牛逼一点,,居然能直接输入字符串和数字。

后面使用的方法原理和我的差不多,但是人家的代码写起来就很快不会浪费那么多时间,对考试比较好

int main()
{
    string a,b;
    long long n,m,sum = 0,_sum = 0;
    cin >> a >> n >> b >> m;
    for(unsigned int i = 0; i < a.size(); i++) if((a[i]-'0') == n) sum = sum*10+(a[i]-'0');
    for(unsigned int i = 0; i < b.size(); i++) if((b[i]-'0') == m) _sum = _sum*10+(b[i]-'0');
    cout << sum+_sum << endl;

    return 0;
}

方法二:

直接利用原来的输入当作数字输入,使用余数方法可以将整串数字中的数字拆除,这个很好,不用使用字符串,但是要注意数字的范围,如果超出范围需要使用longlong类型的数字

#include <iostream>

using namespace std;

int extractNum(int A, int DA);

int main()
{
    int A, DA, B, DB;
    cin >> A >> DA >> B >> DB;
    int PA, PB;
    PA = extractNum(A, DA);
    PB = extractNum(B, DB);
    cout << PA + PB << endl;
    return 0;
}

int extractNum(int A, int DA)
{
    int res = 0;
    while(A>0) {
        int temp = A%10;
        if(temp == DA) {
            res = res*10 + DA;
        }
        A /= 10;
    }
    return res;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值