欧拉项目 #6 C++

Project Euler #6 C++

本文关键字:C++ 项目      更新时间:2023-10-16

前十个自然数的平方和是,

1² + 2²+ ... + 10² = 385

前十个自然数之和的平方是,

(1 + 2 + ... + 10)² = 55² = 3025

因此,前十个自然数的平方和的平方之差是3025 − 385 = 2640

求出前一百个自然数的平方和与总和的平方之差。

**他们说我的回答是错误的:(**

//Project eueler problem 6
#include <iostream>
#include <cmath>
using namespace std;
unsigned int sum(int);
unsigned int sqsum(int);
int main()
{
    cout << sqsum(100) - pow(sum(100) , 2);
}

unsigned int sum(int n) // function for finding sum of n numbers
{
    return (n*(n+1))/2;
}
unsigned int sqsum(int n) // function for finding sum of squares
{
     return ((n)*(n+1)*(2*n +1 ))/6 ;
}

pow(sum(100) , 2);使用double并返回double,因此,您可能会遇到舍入错误。

使用类似的东西(也固定操作数顺序):

cout << sum(100) * sum(100) - sqsum(100) << std::endl;

应该解决您的问题。

我认为这是一种更简单的方法:

#include <iostream>
using namespace std;
int main()
{
   int sum_p = 0;
   int sum_e = 0;
   for(int i=1;i<=100;i++){
       sum_p=sum_p+i*i;
       sum_e=sum_e+i;
   }
   sum_e=sum_e*sum_e;       
   cout<<sum_e-sum_p;
}