【问题标题】:How to reverse a 3 digit number如何反转一个 3 位数字
【发布时间】:2018-03-24 21:13:14
【问题描述】:

代码:

#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. 获取数字的最后一位,num1= n/100
  5. 从用户那里获取中间数,num2=(num%100)/10
  6. 要从用户那里获取最后一位数字,num3=(num%10)/100

这些步骤正确吗? 我尝试使用该程序,但没有任何运气,直到我得到正确的步骤。

例子:

Enter a number: 263
Output: 362

数字始终是 3 位数字,没有任何变化

【问题讨论】:

  • 也许你可以展示你的代码。
  • 输入中是否始终是 3 位数字?
  • 可以递归完成。然后没有循环:)
  • 最后一个和中间是正确的,第一个数字 = n%10 其中n是用户输入的数字
  • reverse = num3, num2, num1; 并没有按照你的想法去做。

标签: c


【解决方案1】:

首先,你的 num3 是错误的,在下面修改 其次,reverse计算错误

#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;
}

【讨论】:

  • 但是,我的程序一直在循环
  • 怎么样?根本没有循环。您可以运行此代码并检查
  • 哦,好的,我知道了,非常感谢!
【解决方案2】:

使用多样化的方法

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;
}

【讨论】:

    【解决方案3】:

    如果中间位是这样计算的

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 2012-09-18
      • 2018-04-12
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多