【PAT B1016】部分A+B(15)---3.1简单模拟

题目描述:

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

输入格式:
输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 10^10。
输出格式:
在一行中输出PA + PB的值。
输入样例1:
3862767 6 13530293 3
输出样例1:
399
输入样例2:
3862767 1 13530293 8
输出样例2:
0

题意:

输入:A,正整数DA1位正整数;

输出:PA定义为A中所有DA组成的正整数,小于A。

思路:

1.先求P:令P初值均为0,枚举A中每一位a,若该位a等于D,则P=P*10+D;枚举完后得到P;

2.同理求Pa;

3.Pa+Pb。

注意:

1.整数型范围:A,B在[0,10^10]间,超过int型范围。

long long A,B,P
int D

2.for循环

for(A循环变量赋初值;B循环条件;C循环变量改变){
···
}
1.for循环开始前先执行A;
2.判断B是否成立:若成立,执行···;否则,退出循环;
3.···执行完后,执行C;之后回到判断B。

3.条件运算符

A?B:C

若A为真,执行并返回B;否则,执行并返回C。

4.关系运算符

等于:==


第一次用for循环写的,老是不对,不知道问题出在哪儿:

#include<cstdio>
int main(){
	long long A,B,Pa=0,Pb=0,re;
	int Da,Db,a,b;
	scanf("%lld %d %lld %lld",&A,&B,&Da,&Db);
	for(;A!=0;A=A/10){
		a=A%10;	
		if(a==Da){
			Pa=Pa*10+Da;	
		}	
	}
	for(;B!=0;B=B/10){
		b=B%10;	
		if(b==Db){
			Pb=Pb*10+Db;
		}
	re=Pa+Pb;
	}
	printf("%lld\n",re);
	return 0;
} 

改用while循环写,还是不对。我好笨啊。烦。

#include<cstdio>
int main(){
	long long A,B,Pa=0,Pb=0,re;
	int Da,Db,a,b;
	scanf("%lld %d %lld %lld",&A,&B,&Da,&Db);
	while(A!=0){
		a=A%10;	
		if(a==Da){
			Pa=Pa*10+Da;	
		}
		A=A/10;	
	}
	while(B!=0){
		b=B%10;	
		if(b==Db){
			Pb=Pb*10+Db;
		}
		B=B/10;
	}
	re=Pa+Pb;
	printf("%lld\n",re);
	return 0;
} 

看标准答案吧。晴神写的。发现我之前代码数据输入类型写错了,结果运行结果还是0。

运行晴神代码,结果也返回0。为什么呢!!蠢哭了。

#include<cstdio>
int main(){
	long long A,B,Da,Db;
	scanf("%lld%lld%lld%lld",&A,&B,&Da,&Db);
	long long Pa=0,Pb=0;
	while(A!=0){//枚举A的每一位 	
		if(A%10==Da)Pa=Pa*10+Da;	//如果当前位等于Da,给Pa增加一位Da 
		A=A/10;	
	}
	while(B!=0){	
		if(B%10==Db)Pb=Pb*10+Db;
		B=B/10;
	}
	printf("%lld\n",Pa+Pb);
	return 0;
} 

检查过了完全跟晴神的一模一样啊?先这样吧。。。。。。明天再想想。

突然想起还有LC的代码,运行正确,明天研究下,先吃饭去了(2018.7.3)

#include <iostream>
using namespace std;
int main() {
    string a, b;
    int m, n, counta = 0, countb = 0, ta = 0, tb = 0;
    cin >> a >> m >> b >> n;
    for (int i = 0; i < a.length(); i++)
        if (m == (a[i] - '0')) counta++;
    for (int i = 0; i < b.length(); i++)
        if (n == (b[i] - '0')) countb++;
    if (counta != 0) ta = m;
    if (countb != 0) tb = n;
    for (int i = 1; i < counta; i++)
        ta = 10 * ta + m;
    for (int i = 1; i < countb; i++)
        tb = 10 * tb + n;
    cout << ta + tb;
    return 0;
}





猜你喜欢

转载自blog.csdn.net/iyansuan/article/details/80894832