我正在try 解决我们C编程实验室中的一个问题.这是一个关于在数字中寻找位数的程序.

我设法编写了解决方案的代码,但问题是无论我做什么,隐藏的测试用例总是失败的.

主要的可见测试用例通过测试时没有任何错误,但隐藏的测试用例总是失败,我无法查看它们.

这是我的代码

#include <stdio.h>

int main() {
    int n;
    int count = 0;
    scanf("%d", &n);
    if (n < 1) {
        n = -n;
    }
    while (n > 0) {
        n /= 10;
        count++;
    }
    printf("Number of digits: %d\n", count);
}

这些是测试用例及其输出 测试用例1:

==同步,由Elderman更正==@elder_man 帖子主题:Re:Колибри

测试用例2:

==同步,由Elderman更正==@elder_man 帖子主题:Re:Колибри

这些测试用例成功运行,没有任何错误,但隐藏的测试用例(其中4个)不起作用.

推荐答案

如果您可以假设程序输入总是由类型int范围内的整数组成,则仍有两种情况失败:

  • 0,则为其输出0而不是1
  • -2147483648,它的行为未定义,很可能输出0而不是10.

您可以通过以下方式计算正数和负数的位数:

#include <stdio.h>

int main() {
    int n, count;

    if (scanf("%d", &n) != 1) {
        printf("not a number\n");
        return 1;
    }
    count = 0;
    for (;;) {
        count++;
        n /= 10;
        if (n == 0)
            break;
    }
    printf("Number of digits: %d\n", count);
    return 0;
}

如果允许用户以八进制或十六进制格式键入数字,则应使用scanf("%i", &n)来识别这些替代语法.

C++相关问答推荐

字符串令牌化xpath表达式

DPDK-DumpCap不捕获端口上的传入数据包

将指针作为参数传递给函数

仅在给定的大小和对齐方式下正确创建全局

从纯C中访问通用项对话框

Flose()在Docker容器中抛出段错误

getline()从c中的外部函数传递指针时输出null

如何使用唯一数字对整型进行分区

';\n&39;和';\r&39;中的';\n&39;之间有什么关系?

为什么电路板被循环删除?

OSDev--双缓冲重启系统

条件跳转或移动取决于未初始化值(S)/未初始化值由堆分配创建(Realloc)

C标准关于外部常量的说明

Linux分段故障(核心转储)

unions 的原子成员是个好主意吗?

分支预测和UB(未定义的行为)

函数的typedef是标准 C 语法吗?它与函数指针的typedef有何不同?

Linux memcpy 限制关键字语法

是什么阻止编译器优化手写的 memcmp()?

clion.我无法理解 Clion 中发生的 scanf 错误