Как расширить int в си

Здравствуйте у меня есть вот такой код на си:

#include <stdio.h>

void main() {
  int stepen,num;
  unsigned long long int summa;

  printf("write num\n> ");
  scanf("%d", &num);

  printf("Write stepen\n> ");
  scanf("%d", &stepen);

  summa = num;
  stepen--;
  /*printf("%d %d\n",num,stepen );*/

  while (stepen != 0) {
    summa *= num;
    stepen--;
  }
  printf("%lu\n",summa);
}

c мелкими числами он работает идеально, но большие обрезает. Или почему то результат становится отрицательным

write num
5
Write stepen
55
-146682003

как можно это исправить?


Ответы (2 шт):

Автор решения: Билолбек Атабеков

Можете попробывать этот код

#include <iostream>
using namespace std;
 
int main()
{
    int a, b;
    cin >> a >> b; // a - число которая возводится в степень, b - степень числа a
 
    const int maxsize = 500000;
    int mas[maxsize];
    mas[1] = 1;
 
    int c = 0, len = 1;
    for(int i = 1; i <= b; ++i)
    {
        for(int j = 1; j <= len; ++j)
        {
            mas[j] = mas[j] * a + c;
            c = mas[j] / 10;
            mas[j] = mas[j] % 10;
        } 
        while(c > 0)
        {
            len++;
            mas[len] = c % 10;
            c /= 10;
        }
    }
 
    while(mas[len] == 0 && len > 1) len--;
 
    for(int i = len; i >= 1; i--) cout << mas[i];
 
    return 0;
}
→ Ссылка
Автор решения: Zhihar

вы поставили тип long long, а в scanf используете %d

требуется использовать %lld

long long c;
scanf("%lld", &c);
printf("%lld", c);

если же вы хотите сделать целый тип неограниченной длины, то считывать вы его минимум должны как строку и выводить как строку, а работать с этим типом (сложения, вычитания, деления, умножения) придется как с массивом int самому реализовывая увеличение массива и обработку переноса разрядов

→ Ссылка