C语言的长串数字的解决方案

第三个检测点的错误
#include
#include
int main()
{
    int DA,DB,A,B;
    int PA=0;
    int PB=0;
    int i=0;
    int j=0;
    scanf("%d %d %d %d",&A,&DA,&B,&DB);
    while(1)
    {
        if(A%10==DA)
        {
            PA=PA+DA*(int)pow(10,i);
            i=i+1;
        }
        A=A/10;
        if(B%10==DB)
        {
            PB=PB+DB*(int)pow(10,j);
            j=j+1;
        }
        B=B/10;
        if(A==B)
        {break;}
    }
    printf("%d\n",PA+PB);
    return 0;
}

运行结果:399

问题:

img


题目:

img

为啥要while(1)呢???
if(A==B)
{break;}
看不懂啊???
改了一稿试一下

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int DA,DB,A,B;
    int PA=0;
    int PB=0;
    int i=0;
    int j=0;
    scanf("%d %d %d %d",&A,&DA,&B,&DB);
    while(A>0)
    {
        if(A%10 == DA)
            PA = PA*10 + A%10;
        A = A/10;
    }
    while(B>0)
    {
        if(B%10 == DB)
            PB = PB*10 + B%10;
        B = B/10;
    }
    printf("%d",PA+PB);
    return 0;
}

用if(A==B)结束循环是不对的,A和B的尾数不一定相等。
应该逐位找A中的DA,找出后就往PA上移位累加。PB一个道理。
运行结果:

img

代码:

#include<stdio.h>

int main()
{
    int DA, DB, A, B;
    int PA = 0;
    int PB = 0;
    int i = 0;
    int j = 0;
    scanf("%d %d %d %d", &A, &DA, &B, &DB);

    while (A)
    {
        if (A % 10 == DA)
        {
            PA = PA * 10 + DA;
        }
        A /= 10;
    }
    while (B)
    {
        if (B % 10 == DB)
        {
            PB = PB * 10 + DB;
        }
        B /= 10;
    }

    printf("%d\n", PA + PB);
    return 0;
}