记录编号 |
471890 |
评测结果 |
AAAAAAAAAA |
题目名称 |
增强的除法问题 |
最终得分 |
100 |
用户昵称 |
Joel_12 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.007 s |
提交时间 |
2017-11-06 21:27:10 |
内存使用 |
0.31 MiB |
显示代码纯文本
/* 嘉 */
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int M=100+10,N=10000;
char s1[M],s2[M];
struct BGM {
static const int B=500+10;
int a[B<<1],len,f;
BGM():len(0),f(0) { memset(a,0,sizeof(a)); }
BGM operator = (const char *num) {
memset(a,0,sizeof(a));
len=strlen(num);
for(int i=0;i<len;i++) a[i+1]=num[len-i-1]-'0';
return *this;
}
BGM operator = (const int num[]) {
memset(a,0,sizeof(a));
len=num[0];
for(int i=1;i<=num[0];i++) a[i]=num[num[0]-i+1];
return *this;
}
BGM operator = (const int num) {
memset(a,0,sizeof(a));
char s[B]; sprintf(s,"%d",num);
*this=s; return *this;
}
BGM(const char *s) { *this=s; }
BGM(const int num[]) { *this=num; }
BGM(const int num) { *this=num; }
void prints() {
if(!len) { printf("0\n"); return ; }
if(f<0) printf("-");
for(int i=len;i>=1;i--) printf("%d",a[i]);
printf("\n");
}
void mod() {
for(int i=1;i<=len;i++) a[i+1]+=a[i]/10,a[i]%=10;
if(a[len+1]) len++;
}
bool operator > (const BGM & A) const {
if(len!=A.len) return len>A.len;
for(int i=len;i>=1;i--) if(a[i]!=A.a[i]) return a[i]>A.a[i];
return 0;
}
bool operator < (const BGM & A) const { return A>*this; }
bool operator == (const BGM & A) const { return !(*this>A||A>*this); }
bool operator >= (const BGM & A) const { return !(A>*this); }
bool operator <= (const BGM & A) const { return !(*this>A); }
bool operator != (const BGM & A) const { return *this>A||A>*this; }
BGM operator + (const BGM & A) {
BGM c; c.len=max(len,A.len);
for(int i=1;i<=c.len;i++) c.a[i]=a[i]+A.a[i];
c.mod(); return c;
}
BGM operator - (const BGM & A) {
BGM x,y,c; c.len=max(len,A.len);
if(*this<A) { c.f=-1,x=A,y=*this; }
else { x=*this,y=A; }
for(int i=1;i<=c.len;i++) {
if(x.a[i]<y.a[i]) x.a[i]+=10,x.a[i+1]--;
c.a[i]=x.a[i]-y.a[i];
}
while(!c.a[c.len]&&c.len>1) c.len--;
return c;
}
BGM operator * (const BGM & A) {
BGM c; c.len=len+A.len-1;
for(int i=1;i<=len;i++) for(int j=1;j<=A.len;j++)
c.a[i+j-1]+=a[i]*A.a[j];
while(!c.a[c.len]&&c.len>1) c.len--;
c.mod(); return c;
}
BGM operator * (const int x) {
BGM c; c.len=len;
for(int i=1;i<=len;i++) c.a[i]=a[i]*x;
c.mod(); return c;
}
BGM operator / (const BGM & A) {
BGM x=*this; BGM c,d=1;
if(len<A.len) return c;
int s[A.len+1]; s[0]=A.len; for(int i=1;i<=A.len;i++) s[i]=0; s[1]=1;
BGM y=s,z; c.len=len-A.len+1;
for(int i=len;i>=1;i--) {
z=z*10+y*a[i];
while(z>=A) z=z-A,c.a[i-A.len+1]++;
}
while(!c.a[c.len]&&c.len>1) c.len--;
c.mod(); return c;
}
};
int main() {
freopen("div.in","r",stdin);
freopen("div.out","w",stdout);
scanf("%s%s",s1,s2);
BGM a=s1,b=s2,c;
c=a/b; c.prints();
return 0;
}