反数,c ++

时间:2016-04-05 19:23:47

标签: c++

我正在使用以下方法创建一个显示数字倒数的程序:

实施例

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

4 个答案:

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