原题
1016 部分A+B (15 分)
正整数 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<109。
输出格式:
在一行中输出 PA+PB 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
思路
先用while与for嵌套循环求出A,B的位数,后定义数组对A,B每位上面的数字进行读入,最后for循环遍历找出符合条件个数,再进行求和输出。(本人第一次写题解,如有不周请多担待,欢迎各位提出宝贵意见)
代码
#include<stdio.h>
#include<math.h>
int main()
{
int A,D_A,B,D_B,PA=0,PB=0;
int i,count1=0,count2=0;
int count3=0,count4=0;
int x,y;
scanf("%d%d%d%d",&A,&D_A,&B,&D_B);
x=A;
y=B;
while(A!=0)//while循环得到位数
{
A=A/10;
count1++;
}
while(B!=0)
{
B=B/10;
count2++;
}
int a[count1],b[count1];
A=x;
B=y;
while(A>9)//将A,B各位上的数字读入数组
{
for(i=0;i<count1-1;i++)
{
a[i]=A%10;
A/=10;
}
}
a[count1-1]=A;
while(B>9)
{
for(i=0;i<count2-1;i++)
{
b[i]=B%10;
B/=10;
}
}
b[count2-1]=B;
for(i=0;i<count1;i++)
{
if(a[i]==D_A)
count3++;
}
for(i=0;i<count2;i++)
{
if(b[i]==D_B)
count4++;
}//找出符合条件的个数
for(i=0;i<count3;i++)
{
PA+=(D_A*pow(10,i));
}
for(i=0;i<count4;i++)
{
PB+=(D_B*pow(10,i));
}//求和输出
printf("%d",PA+PB);
return 0;
}