题目链接在此。
这个题目在做的过程中发现需要注意的点有:
- scanf的输入控制符(%lld,%d),可参见这篇文章。
- 若一个数由n个x组成,求这个数
以上也是解这道题目的关键所在。
刚开始的思路是想:
将输入的A,B读入char[]数组中,然后用循环判断每一位是否等于DA,DB,得到等于DA,DB的个数,然后得出PA,PB,最后求得结果。这种方法也不算复杂。
后来想到,既然又是整数的处理,是否能用除法和取余这两种运算呢?后来想通了,《算法笔记》上的解法也是如此,代码如下:
#include<stdio.h>
int main(){
long long A,B;
int DA,DB;
int PA = 0,PB = 0;
int JA,JB;
int sa = 0, sb = 0;
scanf("%lld %d %lld %d",&A,&DA,&B,&DB);
//拿到A中DA的个数
while( A != 0 ){
JA = A % 10;
if( JA == DA ){
sa ++;
}
A /= 10;
}
//拿到B中DB的个数
while( B != 0 ){
JB = B % 10;
if(JB == DB){
sb++;
}
B /= 10;
}
//求PA
if(sa){
PA = DA;
for(int i = 1; i < sa; i++){
PA = PA*10 + DA;
}
}
//求PB
if(sb){
PB = DB;
for(int i = 1; i < sb; i++){
PB = PB*10 + DB;
}
}
printf("%d\n",PA+PB);
return 0;
}
其实代码可以简化成如下:
#include<stdio.h>
int main(){
long long A,B;
int DA,DB;
int PA = 0,PB = 0;
int JA,JB;
int sa = 0, sb = 0;
scanf("%lld %d %lld %d",&A,&DA,&B,&DB);
//拿到A中DA的个数
while( A != 0 ){
JA = A % 10;
if( JA == DA ){
PA = PA*10 + DA;
}
A /= 10;
}
//拿到B中DB的个数
while( B != 0 ){
JB = B % 10;
if(JB == DB){
PB = PB*10 + DB;
}
B /= 10;
}
printf("%d\n",PA+PB);
return 0;
}
最后,还是提醒自己注意scanf的输入格式控制!!!