【问题标题】:divide a 4-digit integer into 2-digit integers and calculate by c将一个 4 位整数除以 2 位整数并通过 c 计算
【发布时间】:2019-03-14 08:24:48
【问题描述】:

//从键盘输入一个4位整数n,编写程序将其分成两个2位整数a和b,计算并输出加减乘除和冗余运算的结果分裂的两个数字。比如n=-4321,如果拆分后的两个整数是a和b,那么a=-43,b=-21。除法运算结果要求精确到小数点后2位,数据类型为float。冗余和除法运算需要考虑到0的除法,即如果分裂B=0,则输出提示信息“第二个运算符为零!”

//测试不通过,如何解决

#include<stdio.h>
#include<math.h>

int main()
{
    int x, a, b;
    printf("Please input n:\n");
    scanf("%d", &x);
    a = x / 100;
    b = x % 100;
    printf("%d,%d\n", a, b);
    printf("sum=%d,sub=%d,multi=%d\n", a + b, a - b, a*b);
    if (b == 0)
        printf("The second operater is zero!");
    else
        printf("dev=%.2f,mod=%d\n", (float)a / b, a%b);
}

【问题讨论】:

  • 为我工作,什么输入给你错误的输出?
  • 你能用一个不能按预期工作的测试用例来澄清你的问题吗?你给的那个产生了预期的结果。
  • 我在网上提交了这段代码,网页只是反馈了一个失败的结果。我也不知道具体原因
  • 请注意,在线评委通常需要以非常特定的方式格式化输出。另外,如果“冗余”是指remainder,那么它可能过于挑剔,请注意,在数论中,最小正余数始终是正数,这与% 的结果不同。跨度>
  • 很好奇,为什么在(float)a / b(double)a / b 中转换为(float)?注意:在第一种情况下,float 商在作为... 参数传递时提升为double。第二种情况不会导致类型更改。

标签: c


【解决方案1】:

您忘记检查 x 是否为 4 位数字。所以如果输入是12345123 你不满足要求。

#include <stdio.h>

int main()
{

    int x, a, b;
    int passed = 0;

    // Enter a 4 digits number: ABCD
    do {
        printf("Enter X = ");
        scanf("%d", &x);
        passed = (x >= 1000 && x <= 9999) || (x >= -9999 && x <= -1000);
    } while (!passed);

    a = x / 100;
    b = x % 100;

    printf("Numbers: %d %d \n", a, b);

    printf("Sum = %d \n", a + b);
    printf("Sub = %d \n", a - b);
    printf("Mul = %d \n", a * b);
    if (0 == b) {
        printf("Div by Zero \n");    
    } else {
        printf("Div = %f \n", (double)a / b);
        printf("Mod = %d \n", a % b);
    }

    return 0;
}

【讨论】:

  • 检查 scanf("%d", &amp;x) 返回 1 会很有用 ;-)
  • @bruno 是的,我同意,以防止用户输入像 1234axyzt、...
  • @bruno 你能给我更多关于“如何检查 scanf("%d", &x) 返回 1”的代码吗?
猜你喜欢
  • 2021-11-10
  • 2016-03-11
  • 1970-01-01
  • 2018-11-05
  • 2017-05-24
  • 2018-09-02
  • 2014-01-27
  • 2012-03-16
相关资源
最近更新 更多