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;
- //struct aboutNums {int *num1;int sign1; int *num2;int sign2; int compare1to2;} set;
- int conwert2DigitIn10Nums(char a)
- {
- return (a-'0');
- }
- void addOrSubInColumnForOC(int*n1,int*n2,int*help,int * res, int length)
- {
- int point=0;
- int sum=0;
- for (int i = length-1; i >=0; i--) {
- sum = (n1[i]+n2[i] + 2+point);
- res[i] = sum%2; // cout <<endl<<" res["<<i<<"] "<< res[i];
- point = sum/2-1;
- }
- if (point == 1) {
- addOrSubInColumnForOC(res,help,help, res,length);
- }
- }
- void addOrSubInColumn(int*n1,int*n2,int * res, int length)
- {
- int point=0;
- int sum=0;
- for (int i = length-1; i >=0; i--) {
- sum = (n1[i]+n2[i] + 2+point);
- res[i] = sum%2; // cout <<endl<<" res["<<i<<"] "<< res[i];
- point = sum/2-1;
- }
- }
- char conwert10DigitIn2Nums(int a)
- {
- return char(a+'0');
- }
- void convertToInt(char*num,int * n, int length)
- {
- for (int i = 0; i < length; i++) {
- n[i]=conwert2DigitIn10Nums(num[i]);
- // cout <<endl<<"n["<<i<<"] "<<n[i];
- }
- }
- void inputNumInBase2(char*Num2)
- {
- cin.getline(Num2,19);
- cout << "u've entered "<< Num2<<endl;
- }
- void convertToChar(int*n,char*n2,int length)
- {
- for (int i = 0; i < length; i++) {
- n2[i]= conwert10DigitIn2Nums(n[i]);
- }
- }
- void convertToOnesComplement(char*num2,int length)
- {
- for (int i = 0; i < length; i++) {
- if (num2[i]=='0') {
- num2[i]='1';
- }
- else num2[i]='0';
- }
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- cout << "This program adds two 2-base nums "<<endl;
- cout << "Enter two 2-base nums, using digits '1', '0',and sign '+' or '-' before the numbers."<<endl;
- char num1[19]={'\0'};
- inputNumInBase2(num1);
- char num2[19]={'\0'};
- inputNumInBase2(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';
- }
- if (sign11=='-') {
- convertToOnesComplement(num1,length);
- }
- if (sign2=='-') {
- convertToOnesComplement(num2,length);
- }
- int *n1=new int[length];
- int *n2=new int[length];
- int *n=new int[length];
- int *help=new int[length];
- for (int i = 0; i < length-1; i++) {
- help[i]=0;
- }
- help[length-1]=1;
- char* n12=new char[length+1];
- n12[length]='\0';
- convertToInt(num1,n1, length);
- convertToInt(num2,n2,length);
- addOrSubInColumnForOC(n1,n2,help,n,length);
- convertToChar(n,n12,length);
- cout << endl<<"one's complement "<<n12;
- if (n[0]==1) {
- addOrSubInColumn(n,help,n,length);
- convertToChar(n,n12,length);
- //cout << endl<<"n12 "<<n12;
- }
- cout << endl<<"two's complement "<<n12;
- delete []n1;
- delete []n2;
- delete []n;
- delete []help;
- delete []n12;
- getch();
- return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement