Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- using namespace std;
- void main ()
- {
- setlocale (LC_ALL, "rus");
- int k, k1, ost=0, i=0, mas[100], s, l=0; //к и к1 элементы строки от i и i+1 соответственно, в массив записываем конечные остатки, потом выведем его с конца, получив число в 4сс, в s считаем частное от каждого элемента и четырех
- bool durak=false; //Защита от дурака
- string str, str_dop="", s1=""; //str главная строка, str_dop вспомогательная, каждое полученное новое число от деления на 4 записываем в нее, s1 новый элемент стр_доп, полученный в результате деления
- cout<<"Введите число: ";
- cin>>str;
- cout<<endl;
- for (int z=0; z<str.length(); z++) //защита от дурака
- {
- 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]!=','))
- {cout<<endl<<"Ошибка входных данных: допустимо использовать только цифры от 0 до 9"<<endl;
- durak=true;
- break;}
- if ((str[z]==',')||(str[z]=='.')||(str[0]=='-'))
- {cout<<"Ошибка входных данных: допустимо вводить только натуральное число"<<endl;
- durak=true;
- break;}
- if (str[0]=='0')
- {cout<<"Ошибка входных данных: число введенно некорректно"<<endl;
- durak=true;
- break;}
- }
- if (str[i]=='1') k=1;
- if (str[i]=='2') k=2;
- if (str[i]=='3') k=3;
- if (str[i]=='4') k=4;
- if (str[i]=='5') k=5;
- if (str[i]=='6') k=6;
- if (str[i]=='7') k=7;
- if (str[i]=='8') k=8;
- if (str[i]=='9') k=9;
- if (str[i]=='0') k=0;
- if (durak==false) //Если число прошло защиту
- {
- int dlina=str.length(); //длина строк, т. е. числа
- while ((dlina>1)||((k>=4)&&(dlina==1))) //пока число длиннее единицы либо оно имеет одну цифру, бОльшую 3
- {
- ost=0;
- for (i=0; (i<dlina)||(i==dlina-1)&&(k>=4); i++) //пока число не закончилось или не остался последний элемент, меньший четырех
- {
- if (str[i]=='1') k=1;
- if (str[i]=='2') k=2;
- if (str[i]=='3') k=3;
- if (str[i]=='4') k=4;
- if (str[i]=='5') k=5;
- if (str[i]=='6') k=6;
- if (str[i]=='7') k=7;
- if (str[i]=='8') k=8;
- if (str[i]=='9') k=9;
- if (str[i]=='0') k=0;
- if (str[i+1]=='1') k1=1;
- if (str[i+1]=='2') k1=2;
- if (str[i+1]=='3') k1=3;
- if (str[i+1]=='4') k1=4;
- if (str[i+1]=='5') k1=5;
- if (str[i+1]=='6') k1=6;
- if (str[i+1]=='7') k1=7;
- if (str[i+1]=='8') k1=8;
- if (str[i+1]=='9') k1=9;
- if (str[i+1]=='0') k1=0;
- if ((ost==0)&&(k<4)) //если остаток от прошлого деления равен 0 (при делении в первый раз остаток=0) и элементе меньшем четырех
- {
- if (i==dlina-1) //если осталась одна цифра, и она меньше 4
- {
- ost=k; //остаток и есть эта цифра
- s=0; //в строку записываем 0
- s1='0';
- str_dop.append(s1);
- cout<<s<<' '<<ost<<' '<<str_dop<<' '<<k<<endl;
- }
- else //если цифра была не последняя
- {
- s=(k*10+k1)/4; //наше число, меньшее 4, умножаем на 10 и прибавляем следующее число, все это делим на 4
- i++; //счетчик увеличиваем на 2, т. к. используем два разряда
- if (s==1) s1='01'; //при этом нам нужно записать в число 0, т. к. подразумевается, что сначала делим один элемент, но он не делится на 4 и дает 0, после чего берем еще один разряд
- if (s==2) s1='02';
- if (s==3) s1='03';
- if (s==4) s1='04';
- if (s==5) s1='05';
- if (s==6) s1='06';
- if (s==7) s1='07';
- if (s==8) s1='08';
- if (s==9) s1='09';
- if (s==0) s1='00';
- str_dop.append(s1);
- ost=(k*10+k1)-s*4; //остаток вычисляем как разницу между начальным числом и его округленным частным
- cout<<s<<' '<<ost<<' '<<s1<<' '<<str_dop<<' '<<k<<endl;
- }
- }
- else
- {
- if ((ost==0)&&(k>=4)) //если остаток =0, но цифра больше 3
- {
- s=k/4; //просто делим саму цифру на 4
- if (s==1) s1='1';
- if (s==2) s1='2';
- if (s==3) s1='3';
- if (s==4) s1='4';
- if (s==5) s1='5';
- if (s==6) s1='6';
- if (s==7) s1='7';
- if (s==8) s1='8';
- if (s==9) s1='9';
- if (s==0) s1='0';
- str_dop.append(s1); //результат записываем в новую строку
- ost=k-s*4; //вычисляем остаток
- cout<<s<<' '<<ost<<' '<<str_dop<<' '<<k<<endl;
- }
- else
- if (ost>0) //если остаток был больше 0
- {
- s=(ost*10+k)/4; //остаток умножаем на 10 и прибавляем новый элемент, в независимости от того, какой он
- if (s==1) s1='1';
- if (s==2) s1='2';
- if (s==3) s1='3';
- if (s==4) s1='4';
- if (s==5) s1='5';
- if (s==6) s1='6';
- if (s==7) s1='7';
- if (s==8) s1='8';
- if (s==9) s1='9';
- if (s==0) s1='0';
- str_dop.append(s1);
- ost=(ost*10+k)-s*4; //вычисляем остаток
- cout<<s<<' '<<ost<<' '<<str_dop<<' '<<k<<endl;
- }
- }
- }
- mas[l]=ost; //записываем конечный остаток деления в массив
- l++; //увеличиваем счетчик массива
- str.clear(); //стираем начальное число
- str.append(str_dop); //в очищенную строку записываем новое получившееся число
- str_dop.clear(); //очищаем дополнительную строку
- dlina=str.length(); //вычисляем длину нового полученного числа
- cout<<str<<' ';
- cout<<mas[l-1]<<' '<<dlina<<' ';
- i=0; //смотрим, какой будет первая цифра новой строки
- if (str[i]=='1') k=1;
- if (str[i]=='2') k=2;
- if (str[i]=='3') k=3;
- if (str[i]=='4') k=4;
- if (str[i]=='5') k=5;
- if (str[i]=='6') k=6;
- if (str[i]=='7') k=7;
- if (str[i]=='8') k=8;
- if (str[i]=='9') k=9;
- if (str[i]=='0') k=0;
- cout<<k<<endl;
- }
- if (k<4) {mas[l]=k; l++;} //если число стало иметь только 1 разряд и это число меньше 4, это будет последним остатком, записанным в массив
- cout<<endl;
- for (int l1=l-1; l1>=0; l1--) //выводим массив с конца, должно получиться число в 4 сс
- cout<<mas[l1];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement