题目描述
正整数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的值。
样例输入 Copy
3862767 6 13530293 3
3862767 1 13530293 8
样例输出 Copy
399
0
代码
初出茅庐,请多指教!
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
int A,B,DA,DB,PA,PB;
char a[11],b[11];
char a0[11],b0[11];
char da,db;
int i,j,k;
int p[1000];
int num=0;
while(scanf("%d%d%d%d",&A,&DA,&B,&DB)!=EOF){
if(A<=0||A>1e10||B<=0||B>1e10){
printf("error!\n");
return 0;
}
sprintf(a,"%d",A);
da=DA+48;
int na=strlen(a);
j=0;
a0[0]='0';a0[1]='\0'; //初始化a0数组为0
for(i=0;i<na;i++){
if(a[i]==da){
a0[j]=da;
j++;
}
}
if(a0[0]!='0'){
a0[j]='\0';
}
sprintf(b,"%d",B);
db=DB+48;
int nb=strlen(b);
k=0;
b0[0]='0';b0[1]='\0'; //初始化b0数组为0
for(i=0;i<nb;i++){
if(b[i]==db){
b0[k]=db;
k++;
}
}
if(b0[0]!='0'){
b0[k]='\0';
}
sscanf(a0,"%d",&PA);
sscanf(b0,"%d",&PB);
p[num]=PA+PB;
num++;
}
for(i=0;i<num;i++){
printf("%d\n",p[i]);
}
return 0;
}