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,C≤106
问能否在 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;
}