PAT Basic 1016. 部分A+B
PAT Basic 1016. 部分A+B
1. 题目描述:
正整数 \(A\) 的“\(D_A\)(为 1 位整数)部分”定义为由 \(A\) 中所有 \(D_A\) 组成的新整数 \(P_A\)。例如:给定 \(A=3862767\),\(D_A=6\),则 \(A\) 的“\(6\) 部分”\(P_A\) 是 \(66\),因为 \(A\) 中有 2 个 6。
现给定 \(A\)、\(D_A\)、\(B\)、\(D_B\),请编写程序计算 \(P_A+P_B\)。
2. 输入格式:
输入在一行中依次给出 \(A\)、\(D_A\)、\(B\)、\(D_B\),中间以空格分隔,其中 \(0<A,B<10^9\)。
3. 输出格式:
在一行中输出 \(P_A+P_B\) 的值。
4. 输入样例:
3862767 6 13530293 3
3862767 1 13530293 8
5. 输出样例:
399
0
6. 性能要求:
Code Size Limit
16 KB
Time Limit
150 ms
Memory Limit
64 MB
思路:
统计数字出现的次数,这里把数字当作字符串或是字符读入,方便进行统计。最后就是根据出现的次数构建出两个整数进行输出即可。
这里主要还是考察标准IO操作吧,这里我一开始用的代码中注释掉的scanf(),结果把输入中的空格当作字符读入了,导致输入错误,后面加了三个getchar()用于读入空格。
现在回看时发现写成scanf("%s %c%s %c", numA, &digitA, numB, &digitB);
即可。
My Code:
#include <stdio.h>
int main(void)
{
char numA[11], numB[11];
char digitA, digitB;
int countA = 0, countB = 0;
int resA = 0, resB = 0;
//scanf("%s%c%s%c", numA, &digitA, numB, &digitB);
scanf("%s", numA);
getchar(); // to consume whitespace
scanf("%c", &digitA);
getchar(); // to consume whitespace
scanf("%s", numB);
getchar(); // to consume whitespace
scanf("%c", &digitB);
for(int i=0; numA[i]!='\0'; i++)
{
if(numA[i]==digitA) countA++;
}
for(int i=0; numB[i]!='\0'; i++)
{
if(numB[i]==digitB) countB++;
}
while(countA)
{
resA = resA*10 + (digitA-'0');
countA--;
}
while(countB)
{
resB = resB*10 + (digitB-'0');
countB--;
}
printf("%d\n", resA+resB);
// printf("%s\n", numA);
// printf("%c\n", digitA);
// printf("%s\n", numB);
// printf("%c\n", digitB);
return 0;
}