如何编写以数字作为参数并返回1 + 2 +的总和的程序?

如何编写以数字作为参数并返回1 + 2 +的总和的程序?

我无法正确使用代码。 有人能帮助我吗?

#include #include int main(int argc, char*argv[]) { int i; int sum =0; if(argc !=2){ printf("usage: %s  \n", argv[0]); exit(n); } for(i=1; i<=atoi(argv[1]); i++){ sum+=i; } 

首先,回答你的问题。

您需要实际输出结果。 就像是:

 printf("%d\n", sum); 

或者将它归还给任何调用该程序的人,尽管这有点不寻常:

 int main( int argc, char **argv ) { ... return sum; } 

但是我在这里提供了自己的答案,因为有充分的理由考虑在循环中这样做…至少在你想到这一点之前。

即,当n变为65536或更大时,公式(n * (n+1)) / 2将溢出32位整数并产生错误的答案。 但是32位整数本身可以存储n <= 92681 。 这意味着公式本身会为大约30%的解决方案空间产生错误的答案。

所以你可能认为你需要循环,但这里有一个小技巧。 因为公式使用nn+1 ,你可以保证其中一个数字可以被2整除。因此你可以这样做:

 unsigned long n; unsigned long sum; n = atoi(argv[1]); if( n == 0 || n > 92681 ) { printf( "The supplied value (%u) is out of range\n", n ); } else { if( (n % 2) == 0 ) { sum = (n / 2) * (n+1); } else { sum = n * ((n+1) / 2); } printf( "Sum from 1 to %u is %u\n", n, sum ); } 

现在你有一个简单的公式,它产生与循环相同的答案,至少对于所有不会导致总和溢出的n值。

 #include #include int main(int argc, char*argv[]) { int i; int sum =0; if(argc !=2){ printf("usage: %s  \n", argv[0]); exit(n); } int n = atoi(argv[1]); sum = (n*(n+1))/2; // formula of sum of first n numbers } 

无需使用循环。 你可以使用简单的公式,

int sum =(n *(n + 1))/ 2

其中n将是您的输入。

输出将是从输入到1逐减1的每个数字的总和 – 与循环相同。