代码:
#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;
}
我想在不使用任何循环的情况下反转一个数字,我包括了目前为止的步骤,但我不确定它是否正确:
这些步骤是否合适? 我尝试使用该程序,但没有任何运气,直到我得到正确的步骤。
示例:
Enter a number: 263
Output: 362
该数字始终为3位数,无论如何都不会改变
答案 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个数字来使用递归,但是我认为这段代码无法使代码更简洁。