题解 | #M.Fair Equation# 2023牛客暑期多校10

M.Fair Equation

签到题

题目大意

给定一个式子 A + B = C A+B=C A+B=C ,其中正整数 A , B , C ≤ 1 0 6 A,B,C\le 10^6 A,B,C106
问能否在 A , B , C A,B,C A,B,C 其中一个数的某一位置(可以是开头和结尾)插入一个数字,使得等式成立;或原式自然成立。
若成立,输出成立的等式

解题思路

如题目所述,取出等式中的数字,逐位模拟即可。具体实现可参考代码

参考代码

参考代码为已AC代码主干,其中部分功能需读者自行实现

void print_equal(){
    cout << YES;
    cout << num[0] << " + " << num[1] << " = " << num[2] << endl;
}
void solve()
{
    string s;getline(cin,s);
    get_nums(s);ll t;//分离出数字
    if(num[0]+num[1]==num[2]) {print_equal();return ;}//原式成立
    FORLL(i,0,9){
        FORLL(k,0,numlen[0]){
            t=(num[0]/pow_10[k])*pow_10[k]*10+i*pow_10[k]+num[0]%pow_10[k];
            if(t+num[1]==num[2]) {num[0]=t;print_equal();return ;}
        }//在A的第k位插入i,判断是否符合条件,下面同理
        FORLL(k,0,numlen[1]){
            t=(num[1]/pow_10[k])*pow_10[k]*10+i*pow_10[k]+num[1]%pow_10[k];
            if(num[0]+t==num[2]) {num[1]=t;print_equal();return ;}
        }
        FORLL(k,0,numlen[0]){
            t=(num[2]/pow_10[k])*pow_10[k]*10+i*pow_10[k]+num[2]%pow_10[k];
            if(num[0]+num[1]==t) {num[2]=t;print_equal();return ;}
        }
    }cout << NO;
}

你可能感兴趣的:(2023牛客暑期多校,c++)