高精度除法
我现在终于知道 染色问题 这道题写高精度是为什么错了,太弱了!
1 #include<iostream> 2 #include<cstring> 3 #include<fstream> 4 using namespace std; 5 ifstream fin("div.in"); 6 ofstream fout("div.out"); 7 8 string s1,s2;int la,a[250],lb,b[250],c[250],d[500],ans[250]; 9 10 void Print(int e[]){ 11 int i=249; 12 while(e[i]==0&&i>0) i--; 13 while(i>=0) fout<<e[i--]; 14 fout<<endl;//system("pause"); 15 return ; 16 } 17 18 int Big(int e[],int f[]){ 19 for(int i=249;i>=0;--i) if(e[i]>f[i]) return 1; 20 else if(e[i]<f[i]) return 0; 21 return 0; //相等是返回0 22 } 23 24 void Jian(int e[],int f[]){ 25 for(int i=249;i>=0;--i) 26 { 27 e[i]-=f[i]; 28 int j=i; 29 while(e[j]<0) 30 {e[j+1]-=1;e[j]+=10;j++;} 31 } 32 return ; 33 } 34 35 int main() 36 { 37 fin>>s1>>s2; 38 39 la=s1.size()-1; 40 for(int i=0;i<s1.size();++i) 41 a[i]=s1[s1.size()-1-i]-'0'; 42 lb=s2.size()-1; 43 for(int i=0;i<s2.size();++i) 44 b[i]=s2[s2.size()-1-i]-'0'; 45 // Print(b); 46 la-=lb;int k; //la++; 47 while(la>=0) 48 {//cout<<la<<" "; 49 for(k=1;k<=10;++k) //注意 k 50 { 51 memset(c,0,sizeof(c)); 52 for(int i=0;i<=lb;++i) 53 c[i]=b[i]*k; 54 for(int i=0;i<=lb;++i) 55 if(c[i]>9) {c[i+1]+=c[i]/10;c[i]%=10;} 56 memset(d,0,sizeof(d)); 57 for(int i=0;i<=lb+2;++i) //lb+1 58 d[i+la]=c[i]; 59 // Print(c);Print(d);Print(a); 60 if(Big(d,a)) break; 61 } 62 // cout<<k<<endl; 63 ans[la]=k-1; 64 if(k==1) {la--;continue;} 65 k--; 66 memset(c,0,sizeof(c)); 67 for(int i=0;i<=lb;++i) 68 c[i]=b[i]*k; 69 for(int i=0;i<=lb;++i) 70 if(c[i]>9) {c[i+1]+=c[i]/10;c[i]%=10;} 71 memset(d,0,sizeof(d)); 72 for(int i=0;i<=lb+2;++i) 73 d[i+la]=c[i]; 74 75 Jian(a,d); 76 la--; 77 } 78 79 Print(ans); 80 return 0; 81 82 }