我正在使用以下方法创建一个显示数字倒数的程序:
实施例 :
123 ==> 3*10^2 + 2*10^1 + 1*10^1 = 321
但输出总是0.任何帮助?
#include <stdio.h>
int power(int a)
{
int i;
int x = 1;
for (i = 1; i = a; i++)
{
x = x * 10;
}
return x;
}
int inv(int b)
{
int z = b, j = 0, s = 0, y;
for (z = b; z = 0; z = z / 10)
{
for (y = z; y = 0; y = y / 10)
{
j++;
}
s = s + (z % 10)*power(j - 1);
}
return s;
}
int main()
{
printf("please enter a number"); int n;
scanf("%d", &n);
printf("%d", inv(n));
return 0;
}
答案 0 :(得分:1)
您认为这两个for循环何时会继续?
你认为他们什么时候会停止?
(提示:你错了。)
在调试器中观察z和y的值。
for (z = b; z = 0; z = z / 10)
for (y = z; y = 0; y = y / 10)
答案 1 :(得分:1)
您的for循环设置不正确。
for (z = b; z = 0; z = z / 10)
它应该是:
for (z = b; z == 0; z = z / 10)
“z = 0”是一个总是返回false的赋值。因此,您从未输入for循环,返回“s”的初始值,即0。
答案 2 :(得分:1)
这是一个反函数的定义,不需要任何power
函数。保持你的代码简短&amp;简单
int inverse(int b)
{
int s=0;
while(b > 0)
{
s = s*10 + (b % 10);
b /= 10;
}
return s;
}
对于您的上述查询,以下是C语言中for循环的语法:
for ( init; condition; increment ) {
statement(s);
}
答案 3 :(得分:1)
为什么不使用string
并反转它?只有当您可以自由选择方法时,这才有效。
#include <iostream>
#include <string>
#include <algorithm>
int reverse(const int n)
{
std::string s = std::to_string(n);
std::reverse(s.begin(), s.end());
return std::stoi(s);
}
int main()
{
int number;
std::cin >> number;
std::cout << reverse(number) << std::endl;
return 0;
}