Деление большого числа из 100 цифр, хранящихся в виде строки

У меня есть 100-значный номер, хранящийся в виде строки. Я хочу разделить это число с целым числом меньше 10. Как эффективно разделить большое целое число, хранящееся в виде строки с целым числом?

5

Решение

Вы можете проверить большая целочисленная библиотека.

Вы можете использовать эту библиотеку в программе на C ++ для выполнения арифметических операций над целыми числами, размер которых ограничен только памятью вашего компьютера. Библиотека предоставляет классы BigUnsigned и BigInteger, которые представляют неотрицательные целые числа и целые числа со знаком соответственно. Большинство арифметических операторов C ++ перегружены для этих классов, поэтому вычисления с большими целыми числами так же просты, как:

#include "BigIntegerLibrary.hh"
BigInteger a = 65536;
cout << (a * a * a * a * a * a * a * a);

(prints 340282366920938463463374607431768211456)

Также проверьте GMP

5

Другие решения

@WasimThabraze — что вы понимаете по методу деления с руки? Поскольку делитель меньше 1/2 размера целого числа, вы можете использовать что-то вроде этого для каждого деления:

char array[10] = {9,8,7,6,5,4,3,2,1,0};

void divide(int dvsr)
{
int rem = 0;
int dvnd;
int quot;
int i;
for(i = 0; i < (sizeof(array)/sizeof(array[0])) ; i++){
dvnd = (rem * 10) + array[i];
rem = dvnd % dvsr;
quot = dvnd / dvsr;
array[i] = quot;
}
}

int main(void)
{
divide(8);
return (0);
}
3

Я надеюсь, что это поможет вам, потому что не все онлайн-судьи позволяют BigIntegerLibrary.Я предположил для некоторого произвольного ввода.

string input="123456789";
int n=input.size();
string final(n,'0');
string::const_iterator  p=input.begin(),q=input.end();
string::iterator f=final.begin();

void divide(int divisor)
{
int reminder = 0,dividend,quotient;

/*repeatedly divide each element*/
for(; p!=q ; p++,f++){
dividend = (reminder * 10) + (*p-'0');
reminder = dividend % divisor;
quotient = dividend / divisor;
*f = quotient + '0';
}
/*remove any leading zeroes from the result*/
n = final.find_first_not_of("0");
if (n != string::npos)
{
final = final.substr(n);
}
std::cout << final ;
}

int main(){
int x;
std::cin  >> x;
divide(x);
return 0;
}
0