努力理解一个以十六进制,八进制,二进制和十进制计算数字总和的程序

时间:2017-01-23 19:36:18

标签: c++

我一直在努力理解这里的长长号码功能如何运作。我无法完全掌握的是if中的for循环。为什么当我们在dec中有一个数字时,我们是否必须将它提升到那个权力?难道我们不应该总结并离开吗?另外,为什么我们将其他数字提高到那个权力呢?

以下是代码:

int counter(long long n, int k) {
    int counter = 0;
    while (n != 0) {
        counter++;
        n /= k;
    }
    return counter;
}
int number2(long long n, int number) {
    return (n / (long long) pow(10, number)) % 10;
}
int toDecimal(long long n, int k) {
    long long decimal = 0;
    for (int i = 0; i < counter(n, 10); i++) {
        decimal += number2(n, i)*(int)pow(k, i);
    }
    return decimal;
}

long long number(char *arr, int start) {
    int end = start;
    long long number2 = 0;

    while (*(arr + end) != ' ' && *(arr + end) != '\0') {
        end++;
    }

    int numberSize = end - start;

    if (*(arr + start) != '0') {
        for (int i = 0; i < numberSize; i++) {
            number2 += (*(arr + start + i) - '0')*pow(10, numberSize - i - 1);
        }
        return number2;
    }

    if (*(arr + start) == '0' && (*(arr + start + 1) != 'b' && *(arr + start + 1) != 'x')) {
        for (int i = 1; i < numberSize; i++) {
            number2 += (*(arr + start + i) - '0')*pow(10, numberSize - i - 1);
        }
        return  toDecimal(number2, 8);
    }

    if (*(arr + start) == '0' && *(arr + start + 1) == 'b') {
        for (int i = 2; i < numberSize; i++) {
            number2 += (*(arr + start + i) - '0')*pow(10, numberSize - i - 1);
        }
        return  toDecimal(number2, 2);
    }

    if (*(arr + start) == '0' && *(arr + start + 1) == 'x') {

        int *hex = new int[numberSize - 2];

        for (int i = 2; i < numberSize; i++) {

            if (*(arr + start + i) >= '0'&&
                *(arr + start + i) <= '9')
                arr[i - 2] = (*(arr + start + i) - '0');

            if (*(arr + start + i) >= 'A'&&
                *(arr + start + i) <= 'F')
                arr[i - 2] = (int)(*(arr + start + i) - '7');
            number2 += arr[i - 2] * pow(16, numberSize - i - 1);

        }
        delete[] hex;
        return number2;
    }
}

int main() {
    char first[1000];
    cin.getline(first, 1000);

    int size = strlen(first);

    long numberr = number(&first[0], 0);
    for (int counter = 0; counter < size; counter++) {
        if (first[counter] == ' '&&first[counter + 1] == '+') {
            numberr += number(&first[0], counter + 3);
        }
    }
    cout << numberr << "\n";
    return 0;
}

1 个答案:

答案 0 :(得分:1)

数字是一个字符串,是一个表示数字的单个字符序列。您必须将字符转换为数字(“1” - > 1),然后将其乘以正确的十位数以将其移动到正确的位置。例如:“123” - &gt; (1 * 10 ^ 2)+(2 * 10 ^ 1)+(3 * 10 ^ 0)