/*limit:a>b>0*/ #include<iostream> using namespace std; #include<string> string add(string x,string y) { string sum; int index_x=x.size()-1,index_y=y.size()-1; int num=0,tmp=0; while(index_x>=0&&index_y>=0){ int num_x=x[index_x]-48, num_y=y[index_y]-48; num=num_x+num_y+tmp; string temp; if(num>=10)tmp=num/10; else tmp=0; temp+=(num%10+48); sum.insert(0,temp); index_x--;index_y--; } if(tmp&&index_x<0&&index_y<0){string temp;temp+=(tmp+48);sum.insert(0,temp);} else{ while(index_x>=0){ string temp; int num=x[index_x]-48+tmp; if(num>=10)tmp=num/10; else tmp=0; temp+=(num%10+48); sum.insert(0,temp); index_x--; } while(index_y>=0){ string temp; int num=y[index_y]-48+tmp; if(num>=10)tmp=num/10; else tmp=0; temp+=(num%10+48); sum.insert(0,temp); index_y--; } if(tmp){string temp;temp+=(tmp+48);sum.insert(0,temp);} } return sum; } string sub(string a,string b) { int len_a=a.size(),len_b=b.size(); string c; int len_c=0; bool flag=false; while(len_b>0){ if(flag)a[len_a]=a[--len_a]-1; else len_a--; char temp=a[len_a]-b[--len_b]; if(temp<0){temp+=58;flag=true;} else {temp+=48;flag=false;} c+=temp; len_c++; } while(len_a>0){ if(flag)a[len_a]=a[--len_a]-1; else len_a--; if(a[len_a]<48){a[len_a]+=10;flag=true;} else flag=false; c+=a[len_a]; len_c++; } while(len_c>1&&c[len_c-1]==48)len_c--; string sum; for(int i=--len_c;i>=0;i--) sum+=c[i]; return sum; } string mul(string a,string b) { int len_b=b.size(); string sum; int mark=1; while(len_b>0){ len_b--; int len_a=a.size(); int k=1*mark; mark*=10; string pre; while(len_a>0){ int temp=(a[--len_a]-48)*(b[len_b]-48); string post; if(temp/10!=0){post+=temp/10+48;post+=temp%10+48;} else post+=temp+48; int counter=k; k*=10; while(counter>1){ post+='0'; counter/=10; } pre=add(pre,post); } sum=add(sum,pre); } return sum; } string div(string a,string b) { int len_a=a.size(),len_b=b.size(); int finish=len_b-1; string part_a(a,0,finish+1); string i="1",s,remain; bool first=true; while(finish<len_a){ string sum=mul(b,i); if(sum==part_a){ //如果整除,part_a要从fihish开始读 first=false; s+=i; finish++; i="1"; if(finish<len_a)part_a=a[finish]; continue;} if(sum.size()>part_a.size()||(sum.size()==part_a.size()&&sum>part_a)){ //如果除数大于被除数,part_a要补上一位 if(!first)s+=48; first=false; i="1"; finish++; if(finish<len_a)part_a=part_a+a[finish]; continue;} while((sum.size()<part_a.size()||(sum.size()==part_a.size()&&sum<part_a))&&i!="9"){ //如果除数小于被除数,那么找出sum的临界值,part_a为余数+补上一位 i=add(i,"1"); sum=mul(b,i); } first=false; if((sum.size()==part_a.size()&&sum>part_a)||sum.size()>part_a.size()){ //如果不能整除 i=sub(i,"1"); sum=mul(b,i); } s+=i; i="1"; remain=sub(part_a,sum); finish++; if(finish<len_a){ part_a=remain+a[finish]; } } return s; } void main() { string a,b; while(cin>>a>>b) cout<<div(a,b)<<endl; }