题目描述:
正整数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,正整数;DA,1位正整数;
输出: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;
}