Введено число n^k, мне нужно вывести значение в виде массива символов-строки
Я понятия не имею, как написать код
Ваша проблема не кажется четко определенной. Вы не описываете проблему или ограничения в деталях.
В любом случае, вот простой код, который, надеюсь, поможет вам начать работу.
#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;
}
Это не работает для любых больших чисел.
Мне нужно напечатать любое число, например: input n = 2, k = 82. Вывод массивной строки символов: 4835703278458516698824704
Реализуйте свой собственный 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'? Что они делают&
@glebchesnakov Этот алгоритм вычисляет ваше длинное число, одновременно СОХРАНЯЯ его в строку. Как? Я использовал коды ASCII. Допустим, у вас есть строка, состоящая только из 1 символа, и этот символ — '0'
, в компьютере этот символ на самом деле хранится как число, которое равно 48
(вы можете увидеть всю таблицу здесь: asciitable.com) Очистить ? Хороший! Теперь предположим, что у вас есть цифра 0 (0)
, и, в отличие от '0' (48)
, она действительно имеет значение 0! Как вы конвертируете эту букву в char? Ну, вы добавляете 48! (+'0'
), и чтобы снова преобразовать его в число, вы вычитаете (-'0'
).
@glebchesnakov Итак, алгоритм в основном получает последнюю цифру числа (путем деления на 10 и получения остатка %
), затем преобразует ее в символ, добавляя '0'
, а затем добавляет ее к строке. Но пока он зацикливается, он также снова извлекает все цифры, которые были сохранены, из той же строки, вычитая '0'
. Обратите внимание, как вся эта операция даст нам обратный результат. Вот почему я переворачиваю результат в конце. при преобразовании цифры в символ вы добавляете «0», а при преобразовании символа в цифру вы вычитаете «0». Это будет работать с 123456789, потому что они все в порядке.
У тебя в профиле Санкт Петербург