如何反转3位数字

时间:2017-10-12 20:02:08

标签: c

代码:

#include <stdio.h>

int main()
{
    int n, num1,num2,num3, reverse;    

    printf("Enter the number to reverse:\n");
    scanf("%d", &n);

    num1 = n / 100;
    num2 = (n % 100) / 10;
    num3 = (n % 10) / 100;

    reverse = num3*100+ num2*10;

    printf(" The reverse is %d", reverse);

    system("pause");
    return 0;
}

我想在不使用任何循环的情况下反转一个数字,我包括了目前为止的步骤,但我不确定它是否正确:

  1. 将int声明为num1,num2和num3以及输出,反向
  2. 要求用户输入要撤消的号码
  3. 使用scanf
  4. 存储号码
  5. 获取该号码的最后一位数字,num1 = n / 100
  6. 获取用户的中间数字,num2 =(num%100)/ 10
  7. 要获取用户的最后一位数字,num3 =(num%10)/ 100
  8. 这些步骤是否合适? 我尝试使用该程序,但没有任何运气,直到我得到正确的步骤。

    示例:

    Enter a number: 263
    Output: 362
    

    该数字始终为3位数,无论如何都不会改变

4 个答案:

答案 0 :(得分:2)

首先,你的num3是错的,在下面进行了修改    第二,反向计算错误

#include <stdio.h>

int main()

{


int n, num1,num2,num3, reverse ;


    printf("Enter the number to reverse:\n");
    scanf("%d", &n);

    num1 = n / 100;
    num2 = (n % 100) / 10;
    num3 = n%10 ;

    // num1 , num2 , num3 are digits only  , to make a number use the below step
    reverse = 100*num3 + 10*num2 + num1;

        printf(" The reverse is %d", reverse);



    system("pause");
    return 0;
}

答案 1 :(得分:1)

使用多样化的方法

int main()
{
    char string[4];
    int reverse = 0;

    printf("Enter the number to reverse:\n");
    scanf_s("%d", &reverse);

    if (reverse > 999)
        return 0;

    sprintf_s(string, "%d", reverse);

    char c1 = string[0];
    string[0] = string[2];
    string[2] = c1;

    reverse = atoi(string);

    printf(" The reverse is %d", reverse);
    return 0;
}

或者如果您不想使用atoi

int main()
{
    char string[4];
    int reverse = 0;

    printf("Enter the number to reverse:\n");
    scanf_s("%d", &reverse);

    if (reverse > 999)
        return 0;

    sprintf_s(string, "%d", reverse);

    printf(" The reverse is %c%c%c", string[2], string[1], string[0]);

    return 0;
}

答案 2 :(得分:0)

如果中间数字计算如

num2=(num%100)/10;

然后计算不太重要的数字,如

num3 = (num % 10)/1;

或只是

num3 = num % 10;

本声明

reverse = num3+ num2+ num1;

没有给出你期望的东西。你应该写一下

reverse = 100 * num3 + 10 * num2 + num1;

实际上你不需要计算数字。只需输入一个三位数字作为三个独立的数字。:)

例如

#include <stdio.h>

int main( void )
{
    unsigned int n1, n2, n3;

    printf("Enter a three-digit number: ");
    scanf("%1u%1u%1u", &n1, &n2, &n3);

    printf("Reversed number is %u%u%u\n", n3, n2, n1);

    return 0;
}

程序输出可能看起来像

Enter a three-digit number: 263
Reversed number is 362

如果您不想输出前导零,则可以在程序中包含if语句。这不是这个陈述

printf("Reversed number is %u%u%u\n", n3, n2, n1);

你可以写

printf("Reversed number is ");
if (n3) printf("%u", n3);
if (n3 || n2) printf("%u", n2);
printf("%u\n", n1);

在这种情况下,如果输入例如

100

然后输出

1

而不是

001

或者您可以使用表达式100 * n1 + 10 * n2 + n1。例如

printf("Reversed number is %u\n", 100 * n3 + 10 * n2 + n1);

答案 3 :(得分:-1)

我认为这是一个更好的版本

std::map<std::type_index, std::shared_ptr<Component>> components;

template <typename T>
std::shared_ptr<T> GetComponent() {
    return std::dynamic_pointer_cast<T>(components[typeid(T)]);
}

尽管您可以通过创建新函数并反转n个数字来使用递归,但是我认为这段代码无法使代码更简洁。