a53

CATUL_NR_MARI_PROPUNERE

a53
Feb 25th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.39 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;
  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. while(mic(s,ss))
  150. {
  151. s+='0';
  152. if(!mic(s,ss) || (rez.size()-1-rez.find('.')==6 && rez.find('.')!=-1))
  153. break;
  154. rez+='0';
  155. }
  156. if(rez.find('.')!=-1)
  157. {
  158. if(rez.size()-1-rez.find('.')==6)
  159. return rez;
  160. else
  161. if(rez.size()-1-rez.find('.')<6 && rez.find('.')!=-1)
  162. {
  163. string temp;
  164. while(rez.size()-1-rez.find('.')<6)
  165. {
  166. int ap=0;
  167. while(!mic(s,ss))
  168. s=dx(s,ss),ap++;
  169. rez+=to_string(ap);
  170. s+='0';
  171. }
  172. return rez;
  173. }
  174. }
  175. string temp;
  176. int j,k=s.size(),ap=0;
  177. s+="000000";
  178. for(int i=0;i<s.size() && mic(temp,ss);i++)
  179. temp+=s[i],j=i+1;
  180. while(!mic(temp,ss))
  181. temp=dx(temp,ss),ap++;
  182. rez+=to_string(ap);
  183. for(;j<s.size();j++)
  184. {
  185. if(rez.find('.')!=-1 && rez.size()-1-rez.find('.')==6)
  186. {
  187. if(m==1)
  188. rez.insert(rez.begin()+0,'-');
  189. if(((p1 && !p2) || !m) && rest!="0")
  190. rest.insert(rest.begin()+0,'-');
  191. return rez;
  192. }
  193. ap=0;
  194. if(j==k)
  195. {
  196. rez+='.';
  197. rest=temp;
  198. ls=max(ls,lss);
  199. if(ls)
  200. rest.insert(rest.begin()+rest.size()-ls,'.');
  201. }
  202. if(temp[0]=='0')
  203. temp="",temp+=s[j];
  204. else
  205. temp+=s[j];
  206. if(temp[0]=='0')
  207. {
  208. rez+='0';
  209. continue;
  210. }
  211. while(mic(temp,ss) && j<s.size())
  212. {
  213. rez+='0',temp+=s[++j];
  214. if(rez.size()-1-rez.find('-')==6 && rez.find('.')!=-1)
  215. {
  216. if(m==1)
  217. rez.insert(rez.begin()+0,'-');
  218. if(((p1 && !p2) || !m) && rest!="0")
  219. rest.insert(rest.begin()+0,'-');
  220. return rez;
  221. }
  222. }
  223. while(!mic(temp,ss))
  224. temp=dx(temp,ss),ap++;
  225. rez+=to_string(ap);
  226. }
  227. if(m==1)
  228. rez.insert(rez.begin()+0,'-');
  229. if(((p1 && !p2) || !m) && rest!="0")
  230. rest.insert(rest.begin()+0,'-');
  231. return rez;
  232. }
  233.  
  234. int main()
  235. {
  236. string s,ss,rez,rest="0",sss,ssss;
  237. cin>>s>>ss;
  238. rez=ddx(s,ss,rest);
  239. cout<<rez<<'\n'<<rest;
  240. return 0;
  241. }
Add Comment
Please, Sign In to add comment