恶心的高精
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=100001;
char ch1[MAXN],ch2[MAXN];
struct st{
int len,a[MAXN];
}a,b;
bool ifbig(st a,st b)
{
if (a.len!=b.len) return a.len>b.len?true:false;
int i=a.len;
while (a.a[i]==b.a[i]) i--;
return a.a[i]>=b.a[i]?true:false;
}
void shuchu(st a)
{
for (int i=a.len; i>=1; i--)
printf("%d",a.a[i]);
printf("\n");
}
void mul(st a,st b)
{
st c; memset(c.a,0,sizeof(c.a));
c.len=a.len+b.len-1;
for (int i=1; i<=a.len; i++)
for (int j=1; j<=b.len; j++)
c.a[i+j-1]+=a.a[i]*b.a[j];
for (int i=1; i<=c.len; i++)
if (c.a[i]>=10)
{
c.a[i+1]+=c.a[i]/10;
c.a[i]%=10;
}
while (c.a[++c.len])
{
c.a[c.len+1]+=c.a[c.len]/10;
c.a[c.len]%=10;
}
while (!c.a[c.len]&&c.len>=1) c.len--;
shuchu(c);
// return c;
}
void add(st a,st b)
{
st c; memset(c.a,0,sizeof(c.a));
c.len=max(a.len,b.len);
for (int i=1; i<=c.len; i++)
c.a[i]+=a.a[i]+b.a[i];
for (int i=1; i<=c.len; i++)
if (c.a[i]>=10)
{
c.a[i+1]+=c.a[i]/10;
c.a[i]%=10;
}
while (c.a[++c.len])
{
c.a[c.len+1]+=c.a[c.len]/10;
c.a[c.len]%=10;
}
c.len--;
shuchu(c);
}
void jian(st a,st b)
{
st c; memset(c.a,0,sizeof(c.a));
c.len=max(a.len,b.len);
for (int i=1; i<=c.len; i++)
c.a[i]=a.a[i]-b.a[i];
for (int i=1; i<=c.len; i++)
if (c.a[i]<0)
{
c.a[i]+=10; c.a[i+1]--;
}
while (!c.a[c.len]&&c.len>=2) c.len--;
shuchu(c);
}
void chu(st a,int p)
{
st c; memset(c.a,0,sizeof(c.a));
c.len=a.len;
for (int i=c.len; i>=1; i--)
{
c.a[i]=a.a[i]/p;
a.a[i-1]+=10*(a.a[i]%p);
}
while (!c.a[c.len]&&c.len>=2) c.len--;
shuchu(c);
}
int main()
{
scanf("%s",ch1);
int la=strlen(ch1); int lb=strlen(ch2);
for (int i=1; i<=la; i++)
a.a[la-i+1]=ch1[i-1]-'0';
for (int i=1; i<=lb; i++)
b.a[lb-i+1]=ch2[i-1]-'0';
a.len=la; b.len=lb;
add(a,b);
mul(a,b);
if (ifbig(a,b)) jian(a,b);
else {putchar('-'); jian(b,a);}
int n;
scanf("%d",&n);
chu(a,n);
return 0;
}