HDU6646 A + B = C


题意

给三个数a,b,c,问是否存在\(a*10^n+b*10^m=c*10^k\)
题目链接

思路

将a,b,c末尾的零去掉得到A,B,C,考虑几种情况,其中(n,m,k>0)。

  1. \(A*10^n+B=C*10^k\)不合法
  2. \(A+B*10^m=C*10^k\)不合法
  3. \(A*10^n+B*10^m=C\)不合法
  4. \(A+B=C*10^k\)
  5. \(A*10^n+B=C\)
  6. \(A+B*10^m=C\)
  7. \(A+B=C\)

对于5,6,7三种情况,尝试用C-A,C-B,看是否能与另一个匹配。对于4,用A+B看是否于C匹配。

代码

#include
using namespace std;
const int maxn = 100000+10;

int na,nb,nc,nd;
char s[maxn];
int a[maxn],b[maxn],c[maxn],d[maxn];
int numa,numb,numc;

bool xiao(int a[],int na,int b[],int nb)
{
    if (nanb) return 0;
    for (int i=na-1;i>=0;i--)
    {
        if (a[i]b[i]) return 0;
    }
    return 0;
}

void jian(int a[],int na,int b[],int nb)
{
    nd=na;
    memset(d,0,sizeof(d));
    int o=0;
    for (int i=0;i1&&d[nd-1]==0) nd--;
}

void add(int a[],int na,int b[],int nb)
{
    nd=max(na,nb);
    memset(d,0,sizeof(d));
    int o=0;
    for (int i=0;i1&&s[na-1]=='0') na--,numa--;
        for (int i=0;i1&&s[nb-1]=='0') nb--,numb--;
        for (int i=0;i1&&s[nc-1]=='0') nc--,numc--;
        for (int i=0;i

相关