努力理解一个以十六进制、十进制、bin 和 dec 计算数字总和的程序



我一直在努力理解这里的函数长长数是如何工作的。我无法完全掌握的一点是 if 中的循环。为什么当我们在 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) != '') {
        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" --> 1),然后将其乘以正确的十个数以将其移动到正确的位置。例如:"123" --> (1 * 10^2) + (2 * 10^1) + (3 * 10^0)

最新更新