Как напечатать большое число в строке массива символов

Введено число n^k, мне нужно вывести значение в виде массива символов-строки

Я понятия не имею, как написать код

Найдите более простую задачу. Я не имею в виду, что вы должны остановиться на проблеме, которую сейчас пытаетесь решить, а просто разбить ее на более мелкие и простые подзадачи. Делайте это разбивки до тех пор, пока ни одну из них нельзя будет разбить дальше. Тогда у вас будет набор (надеюсь) очень маленьких и очень простых задач. Решайте их одну за другой в любом порядке. Когда вы начнете собирать вместе, вы начнете решать более крупные и сложные проблемы. И, наконец, вы решили свою первоначальную проблему.
Some programmer dude 21.11.2022 14:14
github.com/kokke/tiny-bignum-c <-- не стесняйтесь вдохновляться моей библиотекой bignum
Morten Jensen 21.11.2022 14:19
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
1
2
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваша проблема не кажется четко определенной. Вы не описываете проблему или ограничения в деталях.

В любом случае, вот простой код, который, надеюсь, поможет вам начать работу.

#include <stdio.h>
#include <math.h>

int main(void) {
    int n;
    printf("Enter N:\n");
    scanf("%d", &n);
    
    int k;
    printf("Enter K:\n");
    scanf("%d", &k);
    
    int result = pow(n,k);
    char text[100];
    sprintf(text, "%d", result);
    
    printf("The Answer is %s\n", text);

    return 0;
}

Это не работает для любых больших чисел.

voidops.com 21.11.2022 14:28

Мне нужно напечатать любое число, например: input n = 2, k = 82. Вывод массивной строки символов: 4835703278458516698824704

gleb chesnakov 21.11.2022 14:30
Ответ принят как подходящий

Реализуйте свой собственный pow, который будет работать с большими числами.

int main()
{
    int n, k;
    scanf("%d%d", &n, &k);
    char* s = (char*)malloc(1000000);
    int i, j, len, temp, carry;
    s[0] = '1';
    len = 1;
    for (i = 1; i <= k; i++)
    {
        carry = 0;
        for (j = 0; j < len; j++)
        {
            temp = (s[j] - '0') * n + carry;
            s[j] = temp % 10 + '0';
            carry = temp / 10;
        }
        while (carry > 0)
        {
            s[len] = carry % 10 + '0';
            carry /= 10;
            len++;
        }
    }
    for (i = len - 1; i >= 0; i--)
        printf("%c", s[i]);
    return 0;
}

Пример pow, который принимает n, k, сохраняя результат в str и возвращая размер в length:

void pow(int n, int k, char* str, int* length)
{
    int i, j, carry, temp;
    str[0] = '1';
    *length = 1;
    for (i = 0; i < k; i++)
    {
        carry = 0;
        for (j = 0; j < *length; j++)
        {
            temp = (str[j] - '0') * n + carry;
            str[j] = temp % 10 + '0';
            carry = temp / 10;
        }
        while (carry)
        {
            str[*length] = carry % 10 + '0';
            carry /= 10;
            (*length)++;
        }
    }
    // reverse
    for (i = 0; i < *length / 2; i++)
    {
        temp = str[i];
        str[i] = str[*length - i - 1];
        str[*length - i - 1] = temp;
    }
    str[*length] = '\0';
}
int main()
{
    int n, k;
    scanf("%d %d", &n, &k);
    char str[100000];
    int length;
    pow(n, k, str, &length);
    printf("%s", str);
    return 0;
}

Привет, спасибо за программу, не могли бы вы мне объяснить, почему там + '0' и - '0'? Что они делают&

gleb chesnakov 29.11.2022 16:31

@glebchesnakov Этот алгоритм вычисляет ваше длинное число, одновременно СОХРАНЯЯ его в строку. Как? Я использовал коды ASCII. Допустим, у вас есть строка, состоящая только из 1 символа, и этот символ — '0', в компьютере этот символ на самом деле хранится как число, которое равно 48 (вы можете увидеть всю таблицу здесь: asciitable.com) Очистить ? Хороший! Теперь предположим, что у вас есть цифра 0 (0), и, в отличие от '0' (48), она действительно имеет значение 0! Как вы конвертируете эту букву в char? Ну, вы добавляете 48! (+'0'), и чтобы снова преобразовать его в число, вы вычитаете (-'0').

voidops.com 29.11.2022 16:51

@glebchesnakov Итак, алгоритм в основном получает последнюю цифру числа (путем деления на 10 и получения остатка %), затем преобразует ее в символ, добавляя '0', а затем добавляет ее к строке. Но пока он зацикливается, он также снова извлекает все цифры, которые были сохранены, из той же строки, вычитая '0'. Обратите внимание, как вся эта операция даст нам обратный результат. Вот почему я переворачиваю результат в конце. при преобразовании цифры в символ вы добавляете «0», а при преобразовании символа в цифру вы вычитаете «0». Это будет работать с 123456789, потому что они все в порядке.

voidops.com 29.11.2022 16:57

У тебя в профиле Санкт Петербург

gleb chesnakov 01.12.2022 14:59

Другие вопросы по теме