我需要编写一个计算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;
}
答案 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;
}