Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma hdrstop
- #pragma argsused
- #ifdef _WIN32
- #include <tchar.h>
- #else
- typedef char _TCHAR;
- #define _tmain main
- #endif
- #include <stdio.h>
- #include <iostream>
- #include <conio.h>
- #include <string>
- #include <math.h>
- using namespace std;
- int conwert12DigitIn10Nums(char a)
- {
- if (a=='A') {
- return 10;
- }
- if (a=='B') {
- return 11;
- }
- return (a-'0');
- }
- void addOrSubInColumn(int*n1,int*n2,int * res, int length)
- {
- int point=0;
- for (int i = length-1; i >=0; i--) {
- res[i] = (n1[i]+n2[i] + 12+point)%12; // cout <<endl<<" res["<<i<<"] "<< res[i];
- point = (n1[i]+n2[i] + 12+point)/12-1;
- }
- }
- char conwert10DigitIn12Nums(int a)
- {
- if (a==10) {
- return 'A';
- }
- if (a==11) {
- return 'B';
- }
- return char(a+'0');
- }
- void convertToInt(char*num,int * n, int length)
- {
- for (int i = 0; i < length; i++) {
- n[i]=conwert12DigitIn10Nums(num[i]);
- //cout <<endl<<"n["<<i<<"] "<<n[i];
- }
- }
- void inputNumInBase12(char*Num12)
- {
- cin.getline(Num12,19);
- cout << "u've entered "<< Num12<<endl;
- }
- void convertToChar(int*n,char*n12,int length)
- {
- for (int i = 0; i < length; i++) {
- n12[i]= conwert10DigitIn12Nums(n[i]);
- }
- }
- void minusOne(int*arr,int length)
- {
- for (int i = 0; i < length; i++) {
- arr[i]*=-1;
- }
- }
- char add(int*bigger,char signb,int*lesser,char signl,int*res,int length)
- {
- if (((signb=='+')&&(signl=='+'))||((signb=='-')&&(signl=='-')))
- {
- addOrSubInColumn(bigger,lesser,res,length);
- //(signb=='+')? return'+':return'-';
- }
- /* if ((signb='-')&&(signb='-'))
- {
- addOrSubInColumn(bigger,lesser,res,length);
- return'-';
- } */
- else if (((signb=='-')&&(signl=='+'))||((signb=='+')&&(signl=='-')))
- {
- minusOne(lesser, length);
- addOrSubInColumn(bigger,lesser,res,length);
- minusOne(lesser, length);
- }
- if (signb=='+') {
- // cout <<endl<<endl<< "signb "<< signb <<endl<<endl;
- return'+';
- }
- else {
- // cout <<endl<<endl<< "signb "<< signb <<endl<<endl;
- return'-'; }
- //(signb=='+')? (signb=='+'):return'-';
- }
- char sub(int*bigger,char signb,int*lesser,char signl,int*res,int length,bool is_replasement)
- {
- if (!is_replasement) {
- if (signl=='+') {
- signl='-';
- }
- else signl='+';
- }
- else {
- if (signb=='+') {
- signb='-';
- }
- else signb='+';
- }
- return add(bigger,signb,lesser,signl,res,length);
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- cout << "This program adds and substracts two 12-base nums "<<endl;
- cout << "Enter two 12-base nums( they must be lesser or equal to 41A792678515120367), using digits and symbol 'A', 'B',and sign '+' or '-' before the numbers."<<endl;
- char num1[19]={'\0'};
- inputNumInBase12(num1);
- char num2[19]={'\0'};
- inputNumInBase12(num2);
- char sign11=num1[0];
- char sign2=num2[0];
- // cout <<endl<<endl<< "sign2 "<< sign2 <<endl<<endl;
- num1[0]='0';
- num2[0]='0';
- int addZeros = (strlen(num1)-strlen(num2));
- char*les = addZeros>0?num2:num1;
- int length = addZeros>0?strlen(num1):strlen(num2);// cout << length;
- for (int i = strlen(les); i >=0; i--)
- {
- les[i+abs(addZeros)]=les[i];
- }
- for (int i=0; i < abs(addZeros); i++) {
- les[i]='0';
- }
- int *n1=new int[length];
- int *n2=new int[length];
- convertToInt(num1,n1, length);
- convertToInt(num2,n2,length);
- //cout << endl<<"n12 "<<n12;
- //cout<<endl<<"num1 "<<num1;
- //cout<<endl<<"num2 "<<num2;
- int compare1to2= strcmp(num1,num2);
- int *bigger;
- int *lesser;
- char signb;
- char signl;
- bool is_replasement;
- if (compare1to2>=0)
- {
- bigger = n1;
- lesser = n2;
- signb= sign11;
- signl = sign2;
- is_replasement=false;
- }
- else{
- bigger = n2;
- lesser = n1;
- signb= sign2; //cout <<endl<<endl<< "signb "<< signb <<endl<<endl;
- signl = sign11;
- is_replasement=true;
- }
- char*addition = new char[length+1];
- int* addInInt= new int [length];
- addition[length]='\0';
- char signAdd=add(bigger,signb,lesser,signl,addInInt,length);
- //cout <<endl<<compare1to2;
- convertToChar(addInInt,addition,length);
- cout<<endl<<endl<<"(num1) + (num2) = "<<signAdd<<addition;
- char*substraction = new char[length+1];
- int* substractInInt= new int [length];
- substraction[length]='\0';
- char signSub=sub(bigger,signb,lesser,signl,substractInInt,length,is_replasement);
- //cout <<endl<<compare1to2;
- convertToChar(substractInInt,substraction,length);
- cout<<endl<<endl<<"(num1) - (num2) = "<<signSub<<substraction;
- delete []n1;
- delete []n2;
- delete []addition;
- delete []addInInt;
- delete []substraction;
- delete []substractInInt;
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement