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

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

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

Найдите более простую задачу. Я не имею в виду, что вы должны остановиться на проблеме, которую сейчас пытаетесь решить, а просто разбить ее на более мелкие и простые подзадачи. Делайте это разбивки до тех пор, пока ни одну из них нельзя будет разбить дальше. Тогда у вас будет набор (надеюсь) очень маленьких и очень простых задач. Решайте их одну за другой в любом порядке. Когда вы начнете собирать вместе, вы начнете решать более крупные и сложные проблемы. И, наконец, вы решили свою первоначальную проблему.
Some programmer dude 21.11.2022 14:14
github.com/kokke/tiny-bignum-c <-- не стесняйтесь вдохновляться моей библиотекой bignum
Morten Jensen 21.11.2022 14:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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