Hex Addition - Assertion Failure
I'm writing a program to add two hex numbers of up to ten digits, and I'm recieving
an "assertion failure," and I can't figure out why. Any help would be greatly appreciated. Thank you for you time!
// hex addition.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
void convertToDec(string, string);
int _tmain(int argc, _TCHAR* argv[])
{
//assign values to last six hex characters
//convert both inputs to dec
//add two dec numbers
//convert back go hex for answer
string input;
string input2;
string hex[16] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
int digit = 0;
bool decision;
char choice;
cout << "Welcome to the Hexadecimal Addition Calculator!" << endl;
do
{
decision = true;
cout << "Enter two hexadecimal numbers (no more than ten digits): " ;
cin >> input;
cout << "Now enter another hexadecimal number to add to the first: ";
cin >> input2;
if (input.length() > 10)
{
cout << "Invalid input" << endl;
system("pause");
return 0;
}
convertToDec(input, input2);
cout << "Would you like to continue? (y/n)";
cin >> choice;
if (choice == 'n' || choice == 'N')
{
decision = false;
system("pause");
return 0;
}
if (choice == 'y' || choice == 'Y')
{
decision = true;
system("pause");
system("cls");
}
} while (decision = true);
system("pause");
return 0;
}
void convertToDec(string input, string input2)
{
int convert[10] = {0};
int result;
int digit1 = 1;
int digit2 = 16;
int digit3 = 16 * 16;
int digit4 = 16 * 16 * 16;
int digit5 = 16 * 16 * 16 * 16;
int digit6 = 16 * 16 * 16 * 16 * 16;
int digit7 = 16 * 16 * 16 * 16 * 16 * 16;
int digit8 = 16 * 16 * 16 * 16 * 16 * 16 * 16;
int digit9 = 16 * 16 * 16 * 16 * 16 * 16 * 16 * 16;
int digit10 = 16 * 16 * 16 * 16 * 16 * 16 * 16 * 16 * 16;
//converts A, B, C, D, E, and F to number values
for (int i = input.length(); i >= 0; i--)
{
convert[i] = input[i];
if(input[i] == 'A')
convert[i] = 10;
if(input[i] == 'B')
convert[i] = 11;
if(input[i] == 'C')
convert[i] = 12;
if(input[i] == 'D')
convert[i] = 13;
if(input[i] == 'E')
convert[i] = 14;
if(input[i] == 'F')
convert[i] = 15;
}
if (input.length() == 1)
result = convert[1] * digit1;
if (input.length() == 2)
result = (convert[2] * digit2) + (convert[1] * digit1);
if (input.length() == 3)
result = (convert[3] * digit3) + (convert[2] * digit2) + (convert[1] * digit1);
if (input.length() == 4)
result = (convert[4] * digit4) + (convert[3] * digit3) + (convert[2] * digit2) + (convert[1] * digit1);
if (input.length() == 5)
result = (convert[5] * digit5) + (convert[4] * digit4) + (convert[3] * digit3) + (convert[2] * digit2) + (convert[1] * digit1);
if (input.length() == 6)
result = (convert[6] * digit6) + (convert[5] * digit5) + (convert[4] * digit4) + (convert[3] * digit3) + (convert[2] * digit2) + (convert[1] * digit1);
if (input.length() == 7)
result = (convert[7] * digit7) + (convert[6]) + (convert[5] * digit5) + (convert[4] * digit4) + (convert[3] * digit3) + (convert[2] * digit2) + (convert[1] * digit1);
if (input.length() == 8)
result = (convert[8] * digit8) + (convert[7] * digit7) + (convert[6]) + (convert[5] * digit5) + (convert[4] * digit4) + (convert[3] * digit3) + (convert[2] * digit2) + (convert[1] * digit1);
if (input.length() == 9)
result = (convert[9] * digit9) + (convert[8] * digit8) + (convert[7] * digit7) + (convert[6]) + (convert[5] * digit5) + (convert[4] * digit4) + (convert[3] * digit3) + (convert[2] * digit2) + (convert[1] * digit1);
if (input.length() == 10)
result = (convert[10] * digit10) + (convert[9] * digit9) + (convert[8] * digit8) + (convert[7] * digit7) + (convert[6]) + (convert[5] * digit5) + (convert[4] * digit4) + (convert[3] * digit3) + (convert[2] * digit2) + (convert[1] * digit1);
}
Related Article: Hexadecimal Addition and POW function
is a C++ discussion thread by rfrapp that has 2 replies, was last updated 1 year ago and has been tagged with the keywords: addition, c++, hexadecimal.
rfrapp
Junior Poster in Training
74 posts since Dec 2011
Reputation Points: 27
Solved Threads: 0
Skill Endorsements: 0
I didn't try to understand what you are doing in your code. But, I see one mistake.
Variables like digit10 which is of int type cannot hold such a big value.
If int is of 4 bytes, it can go only till 2147483647 but digit10 is assigned with 68719476736.
Ah, okay. I'll fix that and see how it works out. Thanks!
rfrapp
Junior Poster in Training
74 posts since Dec 2011
Reputation Points: 27
Solved Threads: 0
Skill Endorsements: 0
I didn't try to understand what you are doing in your code. But, I see one mistake.
Variables like digit10 which is of int type cannot hold such a big value.
If int is of 4 bytes, it can go only till 2147483647 but digit10 is assigned with 68719476736.
It seems the assertion failure is coming from my for statement in line 81. The purpose of this for loop is to print the "input" string backwards, and assign those values the the array of "convert" array. How do you think I can modify this so that I won't have an assertion error? The error it said is "Expression: string subscript out of range."
rfrapp
Junior Poster in Training
74 posts since Dec 2011
Reputation Points: 27
Solved Threads: 0
Skill Endorsements: 0
If you have the value "ABCDEF" in input, what is the value of input.length()?
If i = input.length(), which character is input[i] ?
Remember, zero based values... :icon_wink:
WaltP
Posting Sage w/ dash of thyme
11,404 posts since May 2006
Reputation Points: 3,421
Solved Threads: 1,055
Skill Endorsements: 37
If you have the value "ABCDEF" in input, what is the value of input.length()?
If i = input.length(), which character is input[i] ?
Remember, zero based values... :icon_wink:
In that case it's be 7 right? I'm sorry, arrays confuse me xD
rfrapp
Junior Poster in Training
74 posts since Dec 2011
Reputation Points: 27
Solved Threads: 0
Skill Endorsements: 0
In that case it's be 7 right? I'm sorry, arrays confuse me xD
Count the letters...
WaltP
Posting Sage w/ dash of thyme
11,404 posts since May 2006
Reputation Points: 3,421
Solved Threads: 1,055
Skill Endorsements: 37