%如何在这个C程序上工作?(奇偶整数之和)

%如何在这个C程序上工作?(奇偶整数之和),c,sum,C,Sum,代码如下: #include <stdio.h> #include <conio.h> void main() { int i, N, oddSum = 0, evenSum = 0; printf("Enter the value of N\n"); scanf ("%d", &N); for (i=1; i <=N; i++) { if (i % 2 == 0) eve

代码如下:

    #include <stdio.h>
#include <conio.h>
void main()
{
       int i, N, oddSum = 0, evenSum = 0;


printf("Enter the value of N\n");
    scanf ("%d", &N);
for (i=1; i <=N; i++)
      {
        if (i % 2 == 0)
            evenSum = evenSum + i;
        else
            oddSum = oddSum + i;
    }
printf ("Sum of all odd numbers  = %d\n", oddSum);
    printf ("Sum of all even numbers = %d\n", evenSum);

}
%
运算符提供除法的余数。 偶数除以2将始终具有0的余数,而不考虑符号。奇数,如果为正数,则余数为1,如果为负数,则余数为-1。您只需要测试一个用例来确定它是否是偶数,这就是您在现有代码中看到的情况

测试最低有效位以确定数字是否为奇数更为有效:
这种方法不涉及除法,在处理有符号整数时,只有两种可能的结果,而不是三种。

如果
除法的
剩余
等于
0
条件
否则
!这就足够了吗?它使用模运算来低效地测试一个数字是否为偶数。通过测试最低有效位(如果设置了,则数字为奇数),您可以更高效地完成同样的事情。为了更高效,可以放弃条件,而是在两元素数组中使用索引<代码>整数偶数[2]={0};偶奇数[i&1]+=i当然,您可以确定闭合算术表达式,并将其用于O(1)解。顺便说一句:
main
的返回类型是
int
@AndonM.Coleman:这是无关的,任何平均优化编译器都会为
%2
@Jack生成一条
andl
指令:这只适用于无符号整数。如果签名了
i
,则该替换无效。考虑当你做<代码> - 1% 2 < /代码> vs.代码> - 1和1 < /代码>时会发生什么;一个得-1,另一个得1。
if (i % 2 == 0)
        evenSum = evenSum + i;
if (i & 1)    // Example: 0101 (5) & 0001 (1) == 1
  // Odd

else          // Example: 0100 (4) & 0001 (1) == 0
  // Even