私はこのことを正しく動作させようとしていますが、私はできません。たとえば、F + F = 000000001Eのような16進数を追加します(私は正しいと思いますが)?1D + 1Dを追加しようとすると、最初の10進数(1D)を入力すると、 1(1D)であり、その合計が000000002Eであることを出力する。C++ 16進計算の実行時エラー
#include <iostream>
using namespace std;
void output(char number[]);
void hex_sum(char hex1[], char hex2[], char sum[]);
int main()
{
char answer;
do
{
char hex1[10] = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0'};
char hex2[10] = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0'};
char sum[10] = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0'};
cout << "Enter the first hexadecimal number: \n";
cin >> hex1[0];
cout << "Enter the second hexadecimal number: \n";
cin >> hex2[0];
hex_sum(hex1, hex2, sum);
cout << "The sum is: \n";
for(int i = 9; i >=0; i--)
{
cout << sum[i];
}
cout << "\n" << "Would you like to try again? (Y/N)?\n";
cin >> answer;
} while(answer == 'Y' || answer == 'y');
cout << "Good-bye! \n";
return 0;
}
void hex_sum(char hex1[], char hex2[], char sum[])
{
int x, y;
int carry = 0;
int other_carry = 0;
for(int i = 0; i < 10; i++)
{
if('0' <= hex1[i] && hex1[i] < '0' + 10)
x = hex1[i] - '0';
else
x = hex1[i] - 'A' + 10;
if('0' <= hex2[i] && hex2[i] < '0' + 10)
y = hex2[i] - '0';
else
y = hex2[i] - 'A' + 10;
carry = other_carry;
int z;
z = (x + y + carry) % 16;
other_carry = (x + y + carry)/16;
if(0 <= z && z < 10)
sum[i] = char('0' + z);
else if(10 <= z && z < 16)
sum[i] = char('A' + z - 10);
}
if(1 == carry && 1 == other_carry)
cout << "Addition overflow.\n";
}
Iを削除した場合、それは私が代わり000000003Aの、第1Dしかし1D + 1Dの結果は00000000A2ある出力を入力でき
cout << "Enter the first hexadecimal number: \n";
cin >> hex1[0];
cout << "Enter the second hexadecimal number: \n";
cin >> hex2[0];
から[0]。もしそうすれば、F + Fのような1文字のみからなる16進数の出力も間違っています。 F + F = 000000001Eではなく、000000000Eを取得します。
数字を入力として実際に使用したい場合は、文字配列を読み込むのはなぜですか? ['std :: hex'](http://en.cppreference.com/w/cpp/io/manip/hex)I/Oマニピュレータを確認してください。 –