【问题标题】:Modifying integral values修改整数值
【发布时间】:2015-07-06 18:50:21
【问题描述】:

我正在学习 C 的基本介绍课程。我让整个程序运行起来,但它没有产生应有的所需输出。

任务是编写一个程序,要求用户输入一个整数值并修改输入,以便 1 和 100 的位具有相同的数字,无论哪个值较大。

例如:

1234 将被修改为 1434

1969 将修改为 1969

2025 将修改为 2525

由于某种原因,程序并没有取较大的 1s 和 100s 的值,而是选择较小的值来修改用户输入。

1234 -> 1232

2025 -> 2020

1962 -> 1262

关于可能出现什么问题的任何提示或想法?

#include <stdio.h>
int main() {

    int myValue;
    int tmp;
    int oneDigit;
    int hundredDigit;
    int larger;
    int smaller;
    int factor;

    printf("\nEnter an int: ");
    scanf("%d", &myValue);

    // Getting absolute value
    tmp = (myValue < 0) ? -myValue : myValue;

    // Extracting digits
    oneDigit = tmp % 10;
    hundredDigit = (tmp / 100) % 10;

    // Grabbing larger and smaller integer
    larger = (oneDigit > hundredDigit) ? oneDigit : hundredDigit;
    smaller = (oneDigit > hundredDigit) ? hundredDigit : oneDigit;

    // Checking what to factor by
    factor = (oneDigit > hundredDigit) ? 1 : 100;

    // New modified digit
    tmp = tmp - (larger - smaller) * factor;

    printf("\nThe modified value of %d is %d\n", myValue, tmp);

    return 0;

}

【问题讨论】:

    标签: c visual-studio


    【解决方案1】:
    1. 您需要在此语句中反转因素。

      factor = (oneDigit > hundredDigit) ? 1 : 100;
      

      使用

      factor = (oneDigit > hundredDigit) ? 100 : 1;
      
    2. 您需要将(larger - smaller) * factor; 添加到tmp,而不是减去。

      代替:

      tmp = tmp - (larger - smaller) * factor;
      

      使用:

      tmp = tmp + (larger - smaller) * factor;
      

    【讨论】:

    • 感谢您的快速回复。我试过你的方法,但是当我输入 1234 时,它给了我 1236,这不是预期的输出但是,当我输入 1232 时,它返回 1232,这是预期的输出。你知道为什么会这样吗?即使在修改了您指出不正确的两段代码之后。再次感谢您。
    【解决方案2】:

    代码行:

    // New modified digit
    tmp = tmp - (larger - smaller) * factor;
    

    没有任何意义。

    在任何一种情况下(oneDigit 更大或hundredDigit 更大),您都需要为tmp添加一些值,而不是减去

    此外,您已将因子计算为反向。 必须是:

    factor = (oneDigit > hundredDigit) ? 100 : 1;
    

    【讨论】:

      【解决方案3】:

      改变这个:

      factor = (oneDigit > hundredDigit) ? 1 : 100;
      

      factor = (oneDigit > hundredDigit) ? 100 : 1;
      

      还有变化

       tmp = tmp -(larger - smaller) * factor;
      

        tmp = tmp +(larger - smaller) * factor;
      

      【讨论】:

        猜你喜欢
        • 2020-12-24
        • 2018-02-16
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多