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

有没有一种方法可以将很大的数字作为变量(不是字符串)保存?我不希望代码出现问题,因为我想自己解决。

最佳答案



您可以使用数组:

long LargeNumber[5] = { < first_10_digits>, < next_10_digits>....< last_10_digits> };

现在,您可以计算两个大数的和:
  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



没有原始函数,可以使用任何数据结构(数组/队列/链表)并适本地处理它



当然!但,

09-26 06:22