在没有字符串或字符的帮助下找到数字的反向(例如:2500反向0025)

MEL*_*WIN 1 c c++

当最后有零时,是否有任何找到反向的技术.

在遵循%10技术的算法时,结果为52.并且0缺失.

我只是通过打印提醒(0)来反过来.但我不满意,因为我希望将答案显示为变量中的值.

请告诉我是否有任何技术将值005存储到变量并显示005(请不要使用字符串或字符或数组).

unw*_*ind 5

您不能将具有前导零的整数表示为单个整数变量,该信息根本不是以整数分配位的方式的一部分.您必须使用更大的东西,即字符串或单个(小整数)数字的数组.


Pet*_*rey 5

数字存储为二进制 0 和 1,因此它们总是有前导 0 被砍掉。例如,一个 64 位整数有 64 位,总是和打印时这些前导 0 被丢弃。

您需要知道要保留多少个前导零,并且仅在打印时使用那么多。即,您可以记录一个正常数字中有多少个前导零,而无需对其进行编码,例如在开头添加 1。ie0052被记录为10052并且您在打印时跳过第一个数字。

如果您需要存储单个值,您可以执行以下操作。我使用 do/while 使其0变为10并打印为0. 该数字0是并非所有前导零都被删除的地方(否则它将为空)


这似乎是您想要的解决方案,它在 C 或 C++ 中应该基本相同

static long reverse(long num) {
    long rev = 1; // the 1 marks the start of the number.
    do {
        rev = rev * 10 + num % 10;
        num /= 10;
    } while(num != 0);
    return rev;
}

// make the reversed number printable.
static String toStringReversed(long num) {
    return Long.toString(num).substring(1);
}

long l = reverse(2500); // l = 10052
Run Code Online (Sandbox Code Playgroud)

另一种方法是随时打印数字,因此不需要存储它。

例如

static void printReverse(long l) {
    do {
        System.out.print(l % 10);
        l /= 10;
    } while(l != 0);
}
Run Code Online (Sandbox Code Playgroud)

或者您可以让输入记录位数。

static void printReverse(long l, int digits) {
    for(int i = 0; i < digits; i++) {
        System.out.print(l % 10);
        l /= 10;
    }
}

// prints leading zero backwards as well
printReverse(2500, 6); // original number is 002500
Run Code Online (Sandbox Code Playgroud)

印刷

005200
Run Code Online (Sandbox Code Playgroud)