Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 保留一个大数字的一部分_C++_Algorithm_Bignum - Fatal编程技术网

C++ 保留一个大数字的一部分

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 (

我编写了以下程序来提取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 (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 <代码>界外。(a
a
和b
b
)超出范围。请记住:数组索引是以零为基的。另外,
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;
}