2015-04-28 61 views
1

我正在给C做一个基本的入门级课程。我得到了整体程序的功能,但它没有按照它的要求生成所需的输出。修改整数值

任务是编写一个程序,要求用户输入一个整数值并修改输入,以便1s和100s的位置具有相同的数字,而不管数值是多大。

例如:

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; 

} 

回答

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; 
    
+0

感谢您的快速回复。我试过你的方法,但是当我输入1234时,它给了我1236,这不是预期的输出。但是,当我在1232中输入时,它返回1232,这是预期的输出。你知道为什么会发生这种情况吗?即使在修改您指出的两段代码后仍然不正确。再次感谢你。 –

1

的代码行:

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

没有任何意义。

在这两种情况下(oneDigit大于或hundredDigit较大),你需要添加一些价值tmp,而不是

另外,您已经计算了相反因子。 它必须是:

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

改变这一点:

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

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

,改变

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

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