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)。
- \(A*10^n+B=C*10^k\)不合法
- \(A+B*10^m=C*10^k\)不合法
- \(A*10^n+B*10^m=C\)不合法
- \(A+B=C*10^k\)
- \(A*10^n+B=C\)
- \(A+B*10^m=C\)
- \(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