C++ 保留一个大数字的一部分
我编写了以下程序来提取n号的最后五位数字,这是下面函数的答案: n=1^1+2^2+…+m^m 其中m由用户给出。这个程序对于较小的数字可以正常工作,但是对于大到100^100的m它就不工作了C++ 保留一个大数字的一部分,c++,algorithm,bignum,C++,Algorithm,Bignum,我编写了以下程序来提取n号的最后五位数字,这是下面函数的答案: n=1^1+2^2+…+m^m 其中m由用户给出。这个程序对于较小的数字可以正常工作,但是对于大到100^100的m它就不工作了 #include <iostream> #include <math.h> using namespace std; int main() { int n; cin>>n; intmax_t a[n],num,rem; a[0]=0; for (
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n;
cin>>n;
intmax_t a[n],num,rem;
a[0]=0;
for (int i=1; i<=n; i++){
a[i] = a[i-1]+pow(i,i);
}
num=a[n];
int b[5];
for (int i = 1; i <=5; i++) {
rem = fmod(num,10);
b[i]=rem;
num = num/10;
}
for (int i = 1; i <=5; i++) {
cout<< b[i];
}
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int n;
cin>>n;
intmax_t a[n],num,rem;
a[0]=0;
对于(int i=1;i“获取最后五位数”表示mod 100000。事实上,100^100非常小。在这种情况下,您不需要使用bignum,因为(a*b)mod n=((a mod n)*(b mod n))mod n
#包括
使用名称空间std;
int getLastDigits(int base、int pow、int numDigit){
整数除数=1;
对于(int i=0;i>n;
int res=0;
对于(int i=1;可能的两个问题的复制):首先,C++没有(一些编译器将它作为扩展,但请避免使用它,例如:代码> STD::vector < /代码>)。其次,当你执行<代码> num=a[n];< /C> >你正在索引<代码> a <代码>界外。(aa
和bb
)超出范围。请记住:数组索引是以零为基的。另外,fmod
用于浮点类型stack a look,或者google 100^100比宇宙中的原子数大约10^120倍。不完全是“真的小”。就这个问题而言,我说:)只有最后五位数字,它永远不会超过100000。100^100=(10^2)^100=10^200@molbdnilo,比10^80大10^120倍,约为宇宙中的原子数。对不起,我把断点放错位置了,我理解“100^100是~10^120倍,大于宇宙中的原子数”.英语不是主要语言。
#include <iostream>
using namespace std;
int getLastDigits(int base, int pow, int numDigit) {
int divisor = 1;
for (int i = 0; i < numDigit; i++)
divisor *= 10;
int retVal = 1;
for (int i = 0; i < pow; i++) {
retVal *= base;
retVal %= divisor;
}
return retVal;
}
int main()
{
int n;
cin>>n;
int res = 0;
for (int i=1; i<=n; i++){
int tmp = getLastDigits(i,i,5);
//cout << tmp;
res += tmp;
}
cout << res % 100000;
return 0;
}