题目描述:
正整数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 < 1010。
输出格式:
在一行中输出PA + PB的值。
输入样例1:3862767 6 13530293 3输出样例1:
399输入样例2:
3862767 1 13530293 8输出样例2:
0
思路:
(1)用longlong 存放A和B, 然后枚举A、B中的每一位,当该位等于Da是, 令Pa = 10 * Pa + Da; 同理得到 Pb。
(2)用字符串存储A和B。 记录字符串长度,遍历整个字符串,寻找与Da相同的字符个数。注意ASCII码与数字之间的转换。
(1)代码如下:
#include <cstdio>
int main()
{
long long a, b, c, d;
long long pa, pb;
while(scanf ("%lld%lld%lld%lld", &a, &c, &b, &d) != EOF)
{
pa = 0;
pb = 0;
while (a != 0)
{
if (a % 10 == c) //枚举 a
pa = pa * 10 + c;
a = a / 10;
}
while (b != 0)
{
if (b % 10 == d)
pb = pb * 10 + d;
b = b / 10;
}
printf ("%lld\n", pa + pb);
}
return 0;
}
(2)代码如下:
#include <cstdio>
#include <cstring>
int main()
{
char a[20], b[20];
int len1, len2, c, d, i;
long long pa, pb;
while(scanf ("%s%d%s%d", &a, &c, &b, &d) != EOF)
{
len1 = strlen (a);
len2 = strlen (b);
for (i = 0, pa = 0; i < len1; i++)
{
if (a[i] == ('0' + c)) //ascii码中0~9为48~57;
{
pa = pa * 10 + c;
}
}
for (i = 0, pb = 0; i < len2; i++)
{
if (b[i] == ('0' + d))
{
pb = pb * 10 + d;
}
}
printf ("%lld\n", pa + pb);
}
return 0;
}