以字符串形式存储的100位大数的除法

Division of a big number of 100 digits stored as string

本文关键字:100位 除法 存储 字符串      更新时间:2023-10-16

我有一个100位数字存储为字符串。我想把这个数除以一个小于10的整数。如何有效地将存储为字符串的大整数除以整数?

您可以查看大整数库。

您可以在c++程序中使用此库对大小仅受计算机内存限制的整数进行算术运算。库提供了BigUnsigned和BigInteger类,它们分别表示非负整数和有符号整数。对于这些类,大多数c++算术运算符都是重载的,因此大整数的计算就像下面这样简单:

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

还要检查GMP

@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);
}

我希望这对你有所帮助,因为不是所有的在线裁判都允许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;
}