Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <math.h>
- #include <conio.h>
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <cstdlib>
- using namespace std;
- /* if (zn == '-') {
- for (int i = 0; i < dl; i++) {
- B[i] *= -1;
- }
- } */
- char* dellnull(char* C) {
- bool cisl = false;
- while (cisl == false) {
- if (C[0] == '0' && C[1] == '\0') {
- return C;
- }
- if (C[0] == '0') {
- for (int i = 0; i < strlen(C) + 1; i++) {
- if (C[i] == '0') {
- C[i] = C[i + 1];
- }
- else {
- C[i] = C[i + 1];
- }
- }
- }
- else
- cisl = true;
- }
- return C;
- }
- int* sdvig(int *A, int dl) {
- int* NEW = new int[dl + 1];
- for (int i = dl; i >= 0; i--) {
- if (i == 0) {
- NEW[i] = 0;
- break;
- }
- NEW[i] = A[i - 1];
- }
- dl++;
- return NEW;
- }
- char* sdvig(char *A, int dl) {
- char * NEW = new char[dl + 1];
- for (int i = dl + 1; i >= 0; i--) {
- if (i == 0) {
- NEW[i] = 0;
- break;
- }
- NEW[i] = A[i - 1];
- }
- dl++;
- return NEW;
- }
- char* sdvlf(char *A, int dl) {
- for (int i = 0; i < dl; i++) {
- A[i] = A[i + 1];
- }
- return A;
- }
- void ravn(char *a, char *b) {
- int dl1 = strlen(a);
- int dl2 = strlen(b);
- if (dl1 != dl2) {
- if (dl1 > dl2) {
- while (dl1 != dl2) {
- dl2++;
- for (int i = dl2 - 1; i >= 0; i--) {
- b[dl2] = '\0';
- char tmp = b[i];
- b[i + 1] = tmp;
- }
- b[0] = '0';
- }
- }
- else
- while (dl1 != dl2) {
- dl1++;
- for (int i = dl1 - 1; i >= 0; i--) {
- a[dl1] = '\0';
- char tmp = a[i];
- a[i + 1] = tmp;
- }
- a[0] = '0';
- }
- }
- return;
- }
- int* toint(char* a) {
- int dl = strlen(a);
- int *A = new int[dl];
- for (int i = 0; i < dl; i++) {
- switch (a[i]) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- A[i] = int(a[i]) - 48;
- break;
- case 'A':
- A[i] = 10;
- break;
- case 'B':
- A[i] = 11;
- break;
- case 'C':
- A[i] = 12;
- break;
- case 'D':
- A[i] = 13;
- break;
- case 'E':
- A[i] = 14;
- break;
- case 'F':
- A[i] = 15;
- break;
- case ' ':
- A[i] = 0;
- break;
- default:
- cout << "Ошибка ввода";
- getch();
- exit(0);
- break;
- }
- }
- return A;
- }
- char* tochar(int *C, int dl) {
- char *NEW = new char[dl];
- for (int i = 0; i < dl; i++) {
- switch (C[i]) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- case 9:
- NEW[i] = C[i] + 48;
- break;
- case 10:
- NEW[i] = 'A';
- break;
- case 11:
- NEW[i] = 'B';
- break;
- case 12:
- NEW[i] = 'C';
- break;
- case 13:
- NEW[i] = 'D';
- break;
- case 14:
- NEW[i] = 'E';
- break;
- case 15:
- NEW[i] = 'F';
- break;
- }
- }
- return NEW;
- }
- char* sum(char* a, char* b) {
- int* A = toint(a);
- int* B = toint(b);
- int dl = strlen(a);
- int *C = new int[dl * 2];
- for (int i = dl - 1; i >= 0; i--) {
- C[i] = A[i] + B[i];
- if (C[i] >= 16) {
- if (i == 0) {
- A = sdvig(A, dl);
- B = sdvig(B, dl);
- C = sdvig(C, dl);
- i++;
- dl++;
- }
- C[i] -= 16;
- A[i - 1] += 1;
- }
- }
- char *NEW = tochar(C, dl);
- return NEW;
- }
- char* razn(char* a, char* b) {
- int* A = toint(a);
- int* B = toint(b);
- int dl = strlen(a);
- int *C = new int[dl * 2];
- bool met = false;
- MET:
- for (int i = dl - 1; i >= 0; i--) {
- C[i] = A[i] - B[i];
- if (C[i] < 0) {
- if (i == 0) {
- for (int i = 0; i < dl; i++) {
- int tmp;
- tmp = B[i];
- B[i] = A[i];
- A[i] = tmp;
- }
- met = true;
- goto MET;
- }
- A[i] += 16;
- C[i] = A[i] - B[i];
- A[i - 1] -= 1;
- }
- }
- char *NEW = tochar(C, dl);
- if (met == true) {
- NEW = dellnull(NEW);
- NEW = sdvig(NEW, dl);
- NEW[0] = '-';
- }
- return NEW;
- }
- int main() {
- SetConsoleOutputCP(1251);
- char c1[20] = "";
- char c2[20] = "";
- char znak;
- do {
- cout << "Введите первое число, знак операции и второе число:" << endl;
- cout << " ";
- gets(c1);
- cin >> znak;
- cout << " ";
- gets(c2);
- gets(c2);
- // ravn(c1, c2);
- // cout << "--------------" << endl;
- switch (znak) {
- case '+':
- if (c1[0] != '-' && c2[0] == '-') {
- sdvlf(c2, strlen(c2));
- ravn(c1, c2);
- cout << "--------------" << endl;
- cout << " " << setw(strlen(dellnull(razn(c1, c2))))
- << dellnull(razn(c1, c2)) << endl;
- break;
- }
- if (c1[0] == '-' && c2[0] == '-') {
- sdvlf(c1, strlen(c1));
- sdvlf(c2, strlen(c2));
- ravn(c1, c2);
- char* NEW = new char[strlen(c1)];
- NEW = sum(c1, c2);
- NEW = sdvig(NEW, strlen(c1));
- NEW[0] = '-';
- cout << "--------------" << endl;
- cout << " " << NEW << endl;
- break;
- }
- break;
- case '-':
- break;
- default:
- cout << "Знак введён неверно!" << endl;
- break;
- }
- cout << "Нажмите f для повтора!" << endl;
- }
- while (getch() == 'f');
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement