如何编写以数字作为参数并返回1 + 2 +的总和的程序?参数?
我无法正确使用代码。有人可以帮帮我吗?
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char*argv[])
{
int i;
int sum =0;
if(argc !=2){
printf("usage: %s <count> \n", argv[0]);
exit(n);
}
for(i=1; i<=atoi(argv[1]); i++){
sum+=i;
}
答案 0 :(得分:2)
首先,回答你的问题。
您需要实际输出结果。类似的东西:
printf("%d\n", sum);
或者将其归还给任何调用该程序的人,尽管这有点不寻常:
int main( int argc, char **argv ) {
...
return sum;
}
但是我在这里提供了自己的答案,因为有充分的理由考虑在循环中这样做...至少在你考虑之前要多一点。
即,当(n * (n+1)) / 2
变为65536或更高时,公式n
将溢出32位整数并产生错误的答案。但是32位整数本身可以存储最多n <= 92681
的总和。这意味着公式本身会为大约30%的解空间产生错误的答案。
所以你可能认为你需要循环,但这里有一个小技巧。由于该公式同时使用n
和n+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
的所有值都不会导致总和溢出。
答案 1 :(得分:0)
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char*argv[])
{
int i;
int sum =0;
if(argc !=2){
printf("usage: %s <count> \n", argv[0]);
exit(n);
}
int n = atoi(argv[1]);
sum = (n*(n+1))/2; // formula of sum of first n numbers
}
答案 2 :(得分:0)
无需使用循环。您可以使用简单的公式
int sum =(n *(n + 1))/ 2
其中n将是您的输入。
输出将是从输入到1逐减1的每个数字的总和 - 与循环相同。