我正试图让这件事正常工作但我不能。例如,它添加十六进制数字,如F + F = 000000001E(我认为是正确的,对吗?)但是如果我在输入第一个十进制数字(1D)后尝试添加1D + 1D,则不允许我输入第二个一(1D)并输出和为000000002E。
#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";
}
如果我从
中删除了[0]cout << "Enter the first hexadecimal number: \n";
cin >> hex1[0];
cout << "Enter the second hexadecimal number: \n";
cin >> hex2[0];
它允许我输入第二个1D但输出1D + 1D的结果是00000000A2,而不是000000003A。如果我这样做,十六进制的输出只由一个字母组成,如F + F也是错误的。而不是F + F = 000000001E,我得到000000000E。
答案 0 :(得分:0)
由于您将char作为数据类型,因此它会读入您写入的前两个字母。(在本例中为1和D)并将它们保存在两个不同的数组中。尝试使用字符串。
答案 1 :(得分:-1)
问题在于你输入的方式,你正在使用CHAR数组,它一次只能获取一个值,所以当你输入2位数字时它实际上存储第二个数字在第二个数组(即hex2 [0] ).try FF它会给你000000001E(与F + F相同)。为了使其正确,你应该添加一个条件,如果用户没有键入两位数字,而不是将数组中的第二个元素设置为空(即hex1 [1] ='\ 0'),那么第二个输入相同,希望它对你有帮助。