Как расширить 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 самому реализовывая увеличение массива и обработку переноса разрядов