总结大数

Jak*_*zer 5 c++ string variables largenumber

我在Project Euler网站上遇到了一些问题并遇到了问题.问题是,"计算出以下一百个50位数字之和的前十位数." 我猜有一些数学方法可以解决这个问题,但我只是想知道这个大数字是如何相加的?我将数字存储为字符串并将每个数字转换为长数字但数字太大以至于总和不起作用.

有没有办法将非常大的数字作为变量(不是字符串)?我不希望代码出现问题,因为我想为自己解决这个问题.

vid*_*vid 5

我只是想知道这个大数字是如何相加的?

你可以使用一个数组:

long LargeNumber[5] = { < first_10_digits>, < next_10_digits>....< last_10_digits> };
Run Code Online (Sandbox Code Playgroud)

现在你可以计算出2个大数的总和:

  long tempSum = 0;
  int carry = 0;
  long sum[5] = {0,0,0,0,0};

  for(int i = 4; i >= 0; i--)
  {
    tempSum = largeNum1[i] + largeNum2[i] + carry; //sum of 10 digits

    if( i == 0)
      sum[i] = tempSum; //No carry in case of most significant digit
    else
      sum[i] = tempSum % 1000000000; //Extra digits to be 'carried over'

    carry = tempSum/1000000000;
  }

  for( int i = 0; i < 5; i++ )
    cout<<setw(10)<<setfill('0')<<sum[i]<<"\n"; //Pad with '0' on the left if needed
Run Code Online (Sandbox Code Playgroud)

有没有办法将非常大的数字作为变量(不是字符串)?

没有这个原语,你可以使用任何数据结构(数组/队列/链表)并适当地处理它

我猜有一些数学方法可以解决这个问题

当然!但,

我不希望代码出现问题,因为我想为自己解决这个问题.