以字符串形式存储的100位大数的除法
Division of a big number of 100 digits stored as string
我有一个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;
}
相关文章:
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- C / C++ 移位/偏移/向左或向右移动位图?
- 对字符串进行位操作
- 如何在24位SDL_Surface上设置像素的颜色
- 将浮动的heightmap数组导出为16位原始值
- 在早期的 C 和 C++ 编译器中,手动位移位与乘法和除法的相关性如何?
- 如何将精度设置为C 的100位数字
- 如何将100位整数放在循环中,并在每个周期上添加 1
- 欧氏除法中的位补算子
- 如何使用位运算来代替模和除法运算
- 位阵列除法的其余部分 C++
- 在C++中增加大数字(近 100.000 位)
- 分解大于 100 位的整数
- x86上两个128位整数的高效乘法/除法(无64位)
- 这个代码如何使用64位乘法和模除法计算字节的奇偶校验
- 以字符串形式存储的100位大数的除法
- 数字添加程序,最多100位数字.控制台输出奇数
- 求一个100位数字在C语言中对10^9+7 mod后的值
- C/ c++中最低有效位集的有效除法