洛谷P1480 A/B Problem(高精除高精)
题目描述
输入两个整数a,b,输出它们的商(a<=10^5000,b<=10^9)
输入输出格式
输入格式:
两行,第一行是被除数,第二行是除数。
输出格式:
一行,商的整数部分
输入输出样例
输入样例#1: 复制
10 2
输出样例#1: 复制
5
#include<iostream> #include<cstring> using namespace std; int a[5001],b[5001],c[5001],d,i; void init(int a[]) { string s; cin>>s; a[0]=s.length(); for(i=1;i<=a[0];i++) a[i]=s[a[0]-i]-'0'; } void numcpy(int p[],int q[],int det) { for(int i=1;i<=p[0];i++) q[i+det-1]=p[i]; q[0]=p[0]+det-1; } int compare(int a[],int b[]) { int i; if(a[0]>b[0]) return 1; if(a[0]<b[0]) return -1; for(i=a[0];i>0;i--) { if(a[i]>b[i]) return 1; if(a[i]<b[i]) return -1; } return 0; } void jian(int a[],int b[]) { int flag,i; flag=compare(a,b); if(flag==0) { a[0]=0; return; } if(flag==1) { for(i=1;i<=a[0];i++) { if(a[i]<b[i]) { a[i+1]--; a[i]+=10; } a[i]-=b[i]; } while(a[0]>0&&a[a[0]]==0) a[0]--; } } void chugao(int a[],int b[],int c[]) { int i,tmp[5001]; c[0]=a[0]-b[0]+1; for(int i=c[0];i>0;i--) { memset(tmp,0,sizeof(tmp)); numcpy(b,tmp,i); while(compare(a,tmp)>=0) { c[i]++; jian(a,tmp); } } while(c[0]>0&&c[c[0]]==0) c[0]--; } void printf(int a[]) { int i; if(a[0]==0) { cout<<0<<endl; return; } for(int i=a[0];i>0;i--) cout<<a[i]; cout<<endl; return; } int main() { init(a); init(b); chugao(a,b,c); printf(c); //printf(a); }