¿Cómo escribir un progtwig que tome un número como argumento y devuelva la sum de 1 + 2 + .. hasta el argumento?

¿Cómo escribir un progtwig que tome un número como argumento y devuelva la sum de 1 + 2 + .. hasta el argumento?

No puedo entender bien los códigos. ¿Puede alguien ayudarme?

#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; } 

En primer lugar, para responder a su pregunta.

Necesitas dar salida al resultado. Algo como:

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

O devuélvalo a quienquiera que haya llamado al progtwig, aunque eso es un poco inusual:

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

Pero proporciono mi propia respuesta aquí porque hay una buena razón para considerar hacer esto en un bucle … Al menos hasta que lo hayas pensado un poco más.

A saber, la fórmula (n * (n+1)) / 2 desbordará enteros de 32 bits y producirá la respuesta incorrecta cuando n sea ​​65536 o mayor. Pero el entero de 32 bits puede almacenar una sum hasta n <= 92681 . Eso significa que la fórmula por sí misma produce la respuesta incorrecta para aproximadamente el 30% del espacio de la solución.

Así que puedes pensar que necesitas un bucle, pero hay un pequeño truco aquí. Debido a que la fórmula usa n y n+1 , puede garantizar que uno de esos números sea divisible por 2. Y, por lo tanto, puede hacerlo de la siguiente manera:

 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 ); } 

Ahora tiene una fórmula simple que produce la misma respuesta que el bucle, al menos para todos los valores de n que no llevan a desbordar la sum.

 #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 } 

No hay necesidad de usar un bucle. Puedes usar la fórmula simple,

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

Donde n será tu aporte.

la salida será la sum de cada dígito comenzando desde su entrada hasta 1, disminuyendo en 1, lo mismo que su bucle.