用10位数字交换1000位数字(C)

MOT*_*DEX 1 c floating-point double

我试图切换例如:输入54321.987,然后4和2应该切换,所以输出将是52341.987.54321.777应该成为52341.777.如果它是2345.777,它应该是4325.777.比我不关心的任何东西.但如果它像888886543.777那样只有第二个和第四个数字应该从逗号之前的最右边部分切换.所以它会变成888884563.777

因此,正如LearningC建议的那样,我试图仅用1000s数字与10s数字交换.

但无论我尝试什么,我都会遇到错误.我无法传递错误.我该怎么办?

到目前为止我真正有效的是:

   int main(int argc, char** argv) {
        double x;
        scanf("%lf", &x);

        double tens = ((int) (x / 10)) % 10;
        double thousands = ((int) (x / 1000)) % 10;

        printf("%09.3f", x += (tens - thousands) * 990.0);
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码现在有效.

glg*_*lgl 6

首先,您必须确定这些数字.

你可以这样做

double tens = ((int)(x / 10)) % 10;
double thousands = ((int)(x / 1000)) % 10;
Run Code Online (Sandbox Code Playgroud)

这使你能够做到

x = x - (tens * 10.0) - (thousands * 1000.0) + (tens * 1000.0) + (thousands * 10.0);
Run Code Online (Sandbox Code Playgroud)

它们在原来的地方减去它们并以交换的方式重新添加它们.

你可以优化它

x = x + tens * (1000.0 - 10.0) - thousands * (1000.0 - 10.0);
Run Code Online (Sandbox Code Playgroud)

再次,这个

x += (tens - thousands) * 990.0;
Run Code Online (Sandbox Code Playgroud)