1 题目链接
正整数
A
A
A的"
D
A
D_{A}
DA(为一位整数)部分"定义为由
A
A
A中所有
D
A
D_{A}
DA组成的新整数
P
A
P_{A}
PA。例如:给定
A
=
3862767
,
D
A
=
6
A=3862767,D_{A}=6
A=3862767,DA=6,则
A
A
A的"
6
6
6部分"
P
A
P_{A}
PA是
66
66
66,因为
A
A
A中有两个
6
6
6。
现给定
A
、
D
A
、
B
、
D
B
A、D_{A}、B、D_{B}
A、DA、B、DB,请编写程序计算
P
A
+
P
B
P_{A}+P_{B}
PA+PB。
输入格式:
输入在一行中依次给出
A
、
D
A
、
B
、
D
B
A、D_{A}、B、D_{B}
A、DA、B、DB,中间以空格分隔,其中
0
<
A
,
B
<
1
0
9
。
0<A,B<10^{9}。
0<A,B<109。
输出格式:
在一行中输出
P
A
+
P
B
P_{A}+P_{B}
PA+PB 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
2 思路:
在代码的注释中
3 C语言实现
#include<stdio.h>
int main()
{
char A[11],B[11],D_A[2],D_B[2]; //10^9最多10个字符数组可以装下,多一个为了装下"\n"
scanf("%s", A);
scanf("%s", D_A);
scanf("%s", B);
scanf("%s", D_B);
char *p=A;
char *q=B;
int i=0, j=0; // i为累计A中出现D_A的次数,j为累计A中出现D_B的次数
while(*p!='\0')
{
if(*p==D_A[0]) i++;
p++;
} // i=2
while(*q!='\0')
{
if(*q==D_B[0]) j++;
q++;
} // j=3
int k=1,t=1,P_A=0,P_B=0; // 将函数抽象为 (D_A[0]-'0')*t+(D_A[0]-'0')*(t*10)+(D_A[0]-'0')*(t*100)...
// 第一个例子为 6*1+6*10=66
for(;k<=i;k++,t=10*t) P_A=P_A+(D_A[0]-'0')*t;
k=1;t=1; //归为初始值,对j再循环
for(;k<=j;k++,t=10*t) P_B=P_B+(D_B[0]-'0')*t;
printf("%d", P_A+P_B); //输出结果
return 0;
}
4 评测结果
15分 无错误
图
1
评
测
结
果
图1 评测结果
图1评测结果