Advertisement
a53

DivisionXXL

a53
Dec 27th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. bool mic(string str1,string str2)
  5. {
  6. int n1=str1.length(),n2=str2.length();
  7. if(n1<n2)
  8. return true;
  9. if(n1>n2)
  10. return false;
  11.  
  12. for(int i=0;i<n1;i++)
  13. {
  14. if(str1[i]<str2[i])
  15. return true;
  16. else
  17. if(str1[i]>str2[i])
  18. return false;
  19. }
  20. return false;
  21. }
  22.  
  23. string px(string num1, string num2)
  24. {
  25. int n1=num1.size();
  26. int n2=num2.size();
  27. if(n1==0||n2==0)
  28. return "0";
  29. vector<int> rez(n1+n2,0);
  30. int i_n1=0;
  31. int i_n2=0;
  32. for(int i=n1-1;i>=0;i--)
  33. {
  34. int t=0;
  35. int n1=num1[i]-'0';
  36. i_n2=0;
  37. for(int j=n2-1;j>=0;j--)
  38. {
  39. int n2=num2[j]-'0';
  40. int sum=n1*n2+rez[i_n1+i_n2]+t;
  41. t=sum/10;
  42. rez[i_n1+i_n2]=sum%10;
  43. i_n2++;
  44. }
  45. if(t>0)
  46. rez[i_n1+i_n2]+=t;
  47. i_n1++;
  48. }
  49. int i=rez.size()-1;
  50. while(i>=0 && rez[i]==0)
  51. i--;
  52. if(i==-1)
  53. return "0";
  54. string s="";
  55. while(i>=0)
  56. s+=to_string(rez[i--]);
  57. return s;
  58. }
  59.  
  60. string dx(string str1,string str2)
  61. {
  62. if(mic(str1,str2))
  63. swap(str1,str2);
  64. string str = "";
  65. if(str1[0]=='0')
  66. return "0";
  67. int n1=str1.length(),n2=str2.length();
  68. int dif=n1-n2;
  69. int t=0;
  70. for(int i=n2-1;i>=0;i--)
  71. {
  72. int sub=((str1[i+dif]-'0')-(str2[i]-'0')-t);
  73. if(sub<0)
  74. sub+=10,t=1;
  75. else
  76. t=0;
  77. str.push_back(sub+'0');
  78. }
  79. for(int i=n1-n2-1;i>=0;i--)
  80. {
  81. if(str1[i]=='0'&&t)
  82. {
  83. str.push_back('9');
  84. continue;
  85. }
  86. int sub=((str1[i]-'0')-t);
  87. if (i>0||sub>0)
  88. str.push_back(sub+'0');
  89. t=0;
  90. }
  91. reverse(str.begin(),str.end());
  92. while(str[0]=='0' && str.size()>1)
  93. str.erase(str.begin()+0);
  94. return str;
  95. }
  96.  
  97. string ddx(string s,string ss,string &rest)
  98. {
  99. int m=2,ls=0,lss=0,o1=0,o2=0,p1=0,p2=0;
  100. if(s[0]=='-' || ss[0]=='-')
  101. {
  102. m=1;
  103. if(s[0]=='-' && ss[0]!='-')
  104. p1=1;
  105. if(s[0]!='-' && ss[0]=='-')
  106. p2=1;
  107.  
  108. }
  109. if(s[0]=='-' && ss[0]=='-')
  110. m=0;
  111. if(s[0]=='-')
  112. s.erase(s.begin()+0);
  113. if(ss[0]=='-')
  114. ss.erase(ss.begin()+0);
  115. if(s.find('.')!=-1)
  116. ls=s.find('.'),o1=1;
  117. if(ss.find('.')!=-1)
  118. lss=ss.find('.'),o2=1;
  119. if(o1)
  120. {
  121. s.erase(s.begin()+ls),ls--;
  122. ls=s.size()-1-ls;
  123. }
  124. if(o2)
  125. {
  126. ss.erase(ss.begin()+lss),lss--;
  127. lss=ss.size()-1-lss;
  128. }
  129. if(ls>lss)
  130. for(int i=1;i<=ls-lss;i++)
  131. ss+='0';
  132. else
  133. if(lss>ls)
  134. for(int i=1;i<=lss-ls;i++)
  135. s+='0';
  136. if(ss=="1")
  137. {
  138. rest="0";
  139. return s+".000000";
  140. }
  141. if(s=="0")
  142. {
  143. rest="0";
  144. return "0.000000";
  145. }
  146. string rez;
  147. if(mic(s,ss))
  148. rez="0.";
  149. if(mic(s,ss))
  150. rest=s;
  151. while(mic(s,ss))
  152. {
  153. s+='0';
  154. if(!mic(s,ss) || (rez.size()-1-rez.find('.')==6 && rez.find('.')!=-1))
  155. break;
  156. rez+='0';
  157. }
  158. if(rez.find('.')!=-1)
  159. {
  160. if(rez.size()-1-rez.find('.')==6)
  161. return rez;
  162. else
  163. if(rez.size()-1-rez.find('.')<6 && rez.find('.')!=-1)
  164. {
  165. string temp;
  166. while(rez.size()-1-rez.find('.')<6)
  167. {
  168. int ap=0;
  169. while(!mic(s,ss))
  170. s=dx(s,ss),ap++;
  171. rez+=to_string(ap);
  172. s+='0';
  173. }
  174. return rez;
  175. }
  176. }
  177. string temp;
  178. int j,k=s.size(),ap=0;
  179. s+="000000";
  180. for(int i=0;i<s.size() && mic(temp,ss);i++)
  181. temp+=s[i],j=i+1;
  182. while(!mic(temp,ss))
  183. temp=dx(temp,ss),ap++;
  184. rez+=to_string(ap);
  185. for(;j<s.size();j++)
  186. {
  187. if(rez.find('.')!=-1 && rez.size()-1-rez.find('.')==6)
  188. {
  189. if(m==1)
  190. rez.insert(rez.begin()+0,'-');
  191. if(((p1 && !p2) || !m) && rest!="0")
  192. rest.insert(rest.begin()+0,'-');
  193. return rez;
  194. }
  195. ap=0;
  196. if(j==k)
  197. {
  198. rez+='.';
  199. rest=temp;
  200. ls=max(ls,lss);
  201. if(ls)
  202. rest.insert(rest.begin()+rest.size()-ls,'.');
  203. }
  204. if(temp[0]=='0')
  205. temp="",temp+=s[j];
  206. else
  207. temp+=s[j];
  208. if(temp[0]=='0')
  209. {
  210. rez+='0';
  211. continue;
  212. }
  213. while(mic(temp,ss) && j<s.size())
  214. {
  215. rez+='0',temp+=s[++j];
  216. if(rez.size()-1-rez.find('.')==6 && rez.find('.')!=-1)
  217. {
  218. if(m==1)
  219. rez.insert(rez.begin()+0,'-');
  220. if(((p1 && !p2) || !m) && rest!="0")
  221. rest.insert(rest.begin()+0,'-');
  222. return rez;
  223. }
  224. }
  225. while(!mic(temp,ss))
  226. temp=dx(temp,ss),ap++;
  227. rez+=to_string(ap);
  228. }
  229. if(m==1)
  230. rez.insert(rez.begin()+0,'-');
  231. if(((p1 && !p2) || !m) && rest!="0")
  232. rest.insert(rest.begin()+0,'-');
  233. return rez;
  234. }
  235.  
  236. int main()
  237. {
  238. string s,ss,rez,rest="0";
  239. cin>>s>>ss;
  240. rez=ddx(s,ss,rest);
  241. cout<<rez<<'\n'<<rest;
  242. return 0;
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement