gpt4 book ai didi

c - 如何编写以数字作为参数并返回 1+2+.. 至参数之和的程序?

转载 作者:行者123 更新时间:2023-11-30 14:23:23 28 4
gpt4 key购买 nike

如何编写以数字作为参数并返回 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;
}

最佳答案

首先回答你的问题。

你需要实际输出结果。像这样的东西:

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

或者将其返回给调用该程序的人,尽管这有点不寻常:

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

但我在这里提供我自己的答案,因为有充分的理由考虑循环执行此操作......至少在您进一步考虑之前。

即公式(n * (n+1)) / 2n时会溢出32位整数并产生错误的答案变为 65536 或更大。但 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 的所有值都是如此。这不会导致总和溢出。

关于c - 如何编写以数字作为参数并返回 1+2+.. 至参数之和的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12923523/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com