我需要找到N位数字的总和

时间:2018-09-29 16:02:02

标签: c++

我需要编写一个计算n位数字总和的程序。例如,1位数字的总和为45(从1到9),依此类推。

我写了这段代码,但是它没有用,所以我需要一点帮助。

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main()
{
    int n;
    long suma = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        suma = suma + i;
    }
    cout << suma;
    return 0;
}

2 个答案:

答案 0 :(得分:1)

基本上,您缺少的是一种确定 N位数字是的方法。幸运的是,您知道N位数字的范围是10 ^(N-1)到10 ^ N,因此将其作为循环条件:

#include <cmath>

for (long i = pow(10, n-1); i < pow(10, n); i++)

如果您想更快地执行此操作,则需要事先进行一些数学运算并重新处理算法。您可能需要求和公式:

a = pow(10, n-1);
b = pow(10, n);
sum = (a + b - 1) * (b - a) / 2; // (a1 + an)* n / 2

答案 1 :(得分:-2)

您可以使用以下代码查找N个数字的总和:

include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main()
{
    int n;
    long suma = 0;
    cin >> n;
    for (long i = pow(10, n-1); i < pow(10, n); i++) // this is what was wrong in your approach,
    {
        suma = suma + i;
    }
    cout << suma;
    return 0;
}

OR

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main()
{
    int n,x,y;
    long suma = 0;
    cin >> n;
    x =pow(10,n-1);
    y =pow(10,n);
    suma = (x + (y-1)) * (x - y) / 2;  //this will reduce your time complexity from O(n) by eliminating the for loop.
    cout << suma;
    return 0;
}