Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.52 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. void main ()
  8. {
  9. setlocale (LC_ALL, "rus");
  10. int k, k1, ost=0, i=0, mas[100], s, l=0; //к и к1 элементы строки от i и i+1 соответственно, в массив записываем конечные остатки, потом выведем его с конца, получив число в 4сс, в s считаем частное от каждого элемента и четырех
  11. bool durak=false; //Защита от дурака
  12. string str, str_dop="", s1=""; //str главная строка, str_dop вспомогательная, каждое полученное новое число от деления на 4 записываем в нее, s1 новый элемент стр_доп, полученный в результате деления
  13. cout<<"Введите число: ";
  14. cin>>str;
  15. cout<<endl;
  16. for (int z=0; z<str.length(); z++) //защита от дурака
  17. {
  18. if ((str[z]!='1')&&(str[z]!='2')&&(str[z]!='3')&&(str[z]!='4')&&(str[z]!='5')&&(str[z]!='6')&&(str[z]!='7')&&(str[z]!='8')&&(str[z]!='9')&&(str[z]!='0')&&(str[z+1]=='-')&&(str[z]!='.')&&(str[z]!=','))
  19. {cout<<endl<<"Ошибка входных данных: допустимо использовать только цифры от 0 до 9"<<endl;
  20. durak=true;
  21. break;}
  22. if ((str[z]==',')||(str[z]=='.')||(str[0]=='-'))
  23. {cout<<"Ошибка входных данных: допустимо вводить только натуральное число"<<endl;
  24. durak=true;
  25. break;}
  26. if (str[0]=='0')
  27. {cout<<"Ошибка входных данных: число введенно некорректно"<<endl;
  28. durak=true;
  29. break;}
  30. }
  31.  
  32. if (str[i]=='1') k=1;
  33. if (str[i]=='2') k=2;
  34. if (str[i]=='3') k=3;
  35. if (str[i]=='4') k=4;
  36. if (str[i]=='5') k=5;
  37. if (str[i]=='6') k=6;
  38. if (str[i]=='7') k=7;
  39. if (str[i]=='8') k=8;
  40. if (str[i]=='9') k=9;
  41. if (str[i]=='0') k=0;
  42.  
  43. if (durak==false) //Если число прошло защиту
  44. {
  45. int dlina=str.length(); //длина строк, т. е. числа
  46. while ((dlina>1)||((k>=4)&&(dlina==1))) //пока число длиннее единицы либо оно имеет одну цифру, бОльшую 3
  47. {
  48. ost=0;
  49. for (i=0; (i<dlina)||(i==dlina-1)&&(k>=4); i++) //пока число не закончилось или не остался последний элемент, меньший четырех
  50. {
  51. if (str[i]=='1') k=1;
  52. if (str[i]=='2') k=2;
  53. if (str[i]=='3') k=3;
  54. if (str[i]=='4') k=4;
  55. if (str[i]=='5') k=5;
  56. if (str[i]=='6') k=6;
  57. if (str[i]=='7') k=7;
  58. if (str[i]=='8') k=8;
  59. if (str[i]=='9') k=9;
  60. if (str[i]=='0') k=0;
  61.  
  62. if (str[i+1]=='1') k1=1;
  63. if (str[i+1]=='2') k1=2;
  64. if (str[i+1]=='3') k1=3;
  65. if (str[i+1]=='4') k1=4;
  66. if (str[i+1]=='5') k1=5;
  67. if (str[i+1]=='6') k1=6;
  68. if (str[i+1]=='7') k1=7;
  69. if (str[i+1]=='8') k1=8;
  70. if (str[i+1]=='9') k1=9;
  71. if (str[i+1]=='0') k1=0;
  72.  
  73. if ((ost==0)&&(k<4)) //если остаток от прошлого деления равен 0 (при делении в первый раз остаток=0) и элементе меньшем четырех
  74. {
  75. if (i==dlina-1) //если осталась одна цифра, и она меньше 4
  76. {
  77. ost=k; //остаток и есть эта цифра
  78. s=0; //в строку записываем 0
  79. s1='0';
  80. str_dop.append(s1);
  81. cout<<s<<' '<<ost<<' '<<str_dop<<' '<<k<<endl;
  82. }
  83. else //если цифра была не последняя
  84. {
  85. s=(k*10+k1)/4; //наше число, меньшее 4, умножаем на 10 и прибавляем следующее число, все это делим на 4
  86. i++; //счетчик увеличиваем на 2, т. к. используем два разряда
  87. if (s==1) s1='01'; //при этом нам нужно записать в число 0, т. к. подразумевается, что сначала делим один элемент, но он не делится на 4 и дает 0, после чего берем еще один разряд
  88. if (s==2) s1='02';
  89. if (s==3) s1='03';
  90. if (s==4) s1='04';
  91. if (s==5) s1='05';
  92. if (s==6) s1='06';
  93. if (s==7) s1='07';
  94. if (s==8) s1='08';
  95. if (s==9) s1='09';
  96. if (s==0) s1='00';
  97. str_dop.append(s1);
  98. ost=(k*10+k1)-s*4; //остаток вычисляем как разницу между начальным числом и его округленным частным
  99. cout<<s<<' '<<ost<<' '<<s1<<' '<<str_dop<<' '<<k<<endl;
  100. }
  101. }
  102. else
  103. {
  104. if ((ost==0)&&(k>=4)) //если остаток =0, но цифра больше 3
  105. {
  106. s=k/4; //просто делим саму цифру на 4
  107. if (s==1) s1='1';
  108. if (s==2) s1='2';
  109. if (s==3) s1='3';
  110. if (s==4) s1='4';
  111. if (s==5) s1='5';
  112. if (s==6) s1='6';
  113. if (s==7) s1='7';
  114. if (s==8) s1='8';
  115. if (s==9) s1='9';
  116. if (s==0) s1='0';
  117. str_dop.append(s1); //результат записываем в новую строку
  118. ost=k-s*4; //вычисляем остаток
  119. cout<<s<<' '<<ost<<' '<<str_dop<<' '<<k<<endl;
  120. }
  121. else
  122. if (ost>0) //если остаток был больше 0
  123. {
  124. s=(ost*10+k)/4; //остаток умножаем на 10 и прибавляем новый элемент, в независимости от того, какой он
  125. if (s==1) s1='1';
  126. if (s==2) s1='2';
  127. if (s==3) s1='3';
  128. if (s==4) s1='4';
  129. if (s==5) s1='5';
  130. if (s==6) s1='6';
  131. if (s==7) s1='7';
  132. if (s==8) s1='8';
  133. if (s==9) s1='9';
  134. if (s==0) s1='0';
  135. str_dop.append(s1);
  136. ost=(ost*10+k)-s*4; //вычисляем остаток
  137. cout<<s<<' '<<ost<<' '<<str_dop<<' '<<k<<endl;
  138. }
  139. }
  140. }
  141. mas[l]=ost; //записываем конечный остаток деления в массив
  142. l++; //увеличиваем счетчик массива
  143. str.clear(); //стираем начальное число
  144. str.append(str_dop); //в очищенную строку записываем новое получившееся число
  145. str_dop.clear(); //очищаем дополнительную строку
  146. dlina=str.length(); //вычисляем длину нового полученного числа
  147. cout<<str<<' ';
  148. cout<<mas[l-1]<<' '<<dlina<<' ';
  149. i=0; //смотрим, какой будет первая цифра новой строки
  150. if (str[i]=='1') k=1;
  151. if (str[i]=='2') k=2;
  152. if (str[i]=='3') k=3;
  153. if (str[i]=='4') k=4;
  154. if (str[i]=='5') k=5;
  155. if (str[i]=='6') k=6;
  156. if (str[i]=='7') k=7;
  157. if (str[i]=='8') k=8;
  158. if (str[i]=='9') k=9;
  159. if (str[i]=='0') k=0;
  160. cout<<k<<endl;
  161. }
  162. if (k<4) {mas[l]=k; l++;} //если число стало иметь только 1 разряд и это число меньше 4, это будет последним остатком, записанным в массив
  163. cout<<endl;
  164. for (int l1=l-1; l1>=0; l1--) //выводим массив с конца, должно получиться число в 4 сс
  165. cout<<mas[l1];
  166. }
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement