【问题标题】:Subtracting a sequence of numbers using for loop in C Programming在C编程中使用for循环减去一个数字序列
【发布时间】:2021-12-03 21:53:45
【问题描述】:
int myfunc(int a, int b)
{
    int result = a;
    for(int index = a - 1; index >= b; index--)
    {
        result -= index;
    }
    return result;
}

如何使这个函数根据我选择的 a 和 b 的值从最小数减去最大数? (例如,如果 a = 5 和 b = 8 ,那么程序将输入 5-6-7-8 = -16)

【问题讨论】:

    标签: c loops for-loop subtraction function-definition


    【解决方案1】:

    你走的是“错误的方向”。看看你想做什么:

    5-6-7-8 = -16
    ^ ^ ^ ^
    a | | |
     a+1| |
       a+2|
         a+3
    

    所以从a+1 开始计数向上b

    int result = a;
    for(int index = a + 1; index <= b; index++)
    {
        result -= index;
    }
    // result = -16 for a=5, b=8
    

    Demo

    【讨论】:

      【解决方案2】:

      对于初学者来说,变量index 是多余的。

      为避免溢出(至少在大多数情况下),变量result 的类型应为long long int 而不是int。例如,如果您将运行您的函数,例如

      myfunc( INT_MIN , INT_MIN + 3 );
      

      (前提是你已经包含了标题&lt;limits.h&gt;)如果变量result的类型是int,那么函数将返回值-6(实际上在这种情况下行为是未定义的)而如果变量result 的类型为long long int,那么您将得到正确的结果4294967290

      函数可以如下所示

      long long int myfunc( int a, int b )
      {
          if ( b < a )
          {
              int tmp = b;
              b = a;
              a = tmp;
          }
       
          long long int result = a;
      
          while ( a < b )
          {
              result -= ++a;
          }
      
          return result;
      }
      

      这是一个演示程序。

      #include <stdio.h>
      
      long long int myfunc( int a, int b )
      {
          if ( b < a )
          {
              int tmp = b;
              b = a;
              a = tmp;
          }
       
          long long int result = a;
      
          while ( a < b )
          {
              result -= ++a;
          }
      
          return result;
      }
      
      int main(void) 
      {
          printf( "%lld\n", myfunc( 8, 5 ) );
       
          return 0;
      }
      

      程序输出是

      -16
      

      【讨论】:

        猜你喜欢
        • 2021-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 2021-12-24
        • 2014-02-02
        • 2011-12-22
        相关资源
        最近更新 更多