反向打印号码

时间:2011-09-12 14:34:11

标签: c++

我很简单地问这是否可以。我被要求做以下事情。编写一个程序,不断询问用户正整数(直到 用户输入一个负整数,程序将在该整数处终止。一切 用户输入正整数时,程序将打印出该整数 相反。你的程序应该有一个接受整数和返回的函数 反转的整数。要将整数转换为反向,程序将调用 这个功能。在每个输出结束时我一直都是0.请解释原因。如果我使用void main与函数我得到垃圾。请解释原因。提前谢谢

这是我的代码......

#include<iostream>
#include<cstdlib>

using namespace std;

int reverseNum(int num){
    for(int j=num; j>0; j--)
        cout<<j<<" ";
        cout<<endl;
    return false;
}

int main(){
    double enternum = 0;

    do{
        cout<<"Enter a positive number > 0, to begin countdown ";
        cin >>enternum; 
        cout<<reverseNum(enternum);
        cout<<endl;
    }
    while(enternum>0);

    if(enternum<=0)
        cout<<"Invalid entry, good bye.";
    cout<<endl;

    return 0;
}

8 个答案:

答案 0 :(得分:2)

因为这个:return false; - 我会留给你弄清楚剩下的......

答案 1 :(得分:0)

该函数应该反转整数然后返回结果。例如,如果输入为123,则函数返回321。

您的函数输出倒计时并返回0(= false)。

要反转一个数字,你可以a)将其转换为字符串,反转字符串,将其转换回整数; b)直接用数学除法/乘法/加法/模运算对整数进行。

答案 2 :(得分:0)

在C ++中,您不使用void main()0,因为当您return false时,类型bool的结果会隐式转换为int并在cout<<reverseNum(enternum);行打印

此外,在此行double enternum = 0;中,您需要一个整数int

答案 3 :(得分:0)

从你的文字中我认为该程序按预期工作,但从阅读代码我想它只是从数字倒计时。这是你想要的吗? 我已经像这样实现了(这里返回一个整数的函数也有意义):

int reverseNum(int num)
{
    int reverse = 0;
    [...] // Do the actual reversing
    return reverse;
}

答案 4 :(得分:0)

  

你的程序应该有一个接受整数的函数,并以反向

返回一个整数

你的reverseNum函数应该返回反转的整数,而不是false。并且它也不应该打印数字,它是应该打印它的调用者。

如果有人:

i = reverseNum(1234);

然后我应该包含4321作为整数(NOT字符串)。

你持续得0的原因是因为false等于0作为整数。

答案 5 :(得分:0)

您应该完整阅读C++ FAQ。你应该特别阅读this。您还应该学习如何调试代码。如果你在调试器中逐步执行代码,那么你在这里给出的所有答案都是显而易见的。

答案 6 :(得分:0)

为了好玩,我尝试了一种通用实现,它支持编译器支持的任何整数 或浮点 类型。

请注意,有很多问题:

  • 反转浮点数在语义上没有明确定义(如何定位小数分隔符?我们如何处理指数表示法?)
  • 浮点类型通常是不精确的(至少是常见的IEEE格式),因此缩放输入将引入人工小数位。我没有花太多精力进行适当的舍入,所以有些数字会转换成奇怪的东西(例如123.0可以反转为992.1而不是321.0(未经测试此输入,自己尝试))
  • 实施是可笑的模板快乐。把它想象成这个有趣答案的教学部分。

哦,取消注释DEBUGTRACE定义为...获取调试跟踪:)

现场直播here [click]TM

#include <cmath>
#include <limits>
#include <iostream>

#define MAX_DECIMAL_FRACTION 5
#define DEBUGTRACE(x) // do { std::cerr << x; } while (false)

template <typename T, bool is_integer> struct reverse_impl;

template <typename T>
    struct reverse_impl<T, true>
{
    static T reverse(T input)
    {
        T output;

        for (output = 0; input; input/=10)
            output = (output * 10) + input % 10;

        return output;
    }
};

template <typename T>
    struct reverse_impl<T, false>
{
    static T reverse(T input)
    {
        if (std::abs(input) <= std::numeric_limits<T>::epsilon())
            return T(0);

        // scale input
        int log10 = (int) (std::log(input)/std::log(T(10)));
        input *= std::pow(10, MAX_DECIMAL_FRACTION);
        input = std::floor(input);
        input /= std::pow(10, log10+MAX_DECIMAL_FRACTION);

        DEBUGTRACE("debug: scaled " << input << " digits: ");

        int iteration = std::max(log10+MAX_DECIMAL_FRACTION, MAX_DECIMAL_FRACTION);

        if (std::floor(input) < 1)
        {
            input *= 10;
            iteration--;
        }

        T output;
        for (output = T(0); 
             iteration-- && std::floor(input) >= 1; 
             input-=std::floor(input), input*=T(10))
        {
            output = (output / T(10)) + std::floor(input);
            DEBUGTRACE(std::floor(input));
        }

        DEBUGTRACE(std::endl);
        return output * std::pow(10, log10);
    }
};

template <typename T>
    T reverse(T input)
{ 
    return reverse_impl<T, std::numeric_limits<T>::is_integer>::reverse(input); 
}

int main()
{
    std::cout << reverse(-123l) << std::endl;
    std::cout << reverse(123ul) << std::endl;

    std::cout << reverse(123456.0) << std::endl;
    std::cout << reverse(0.027f) << std::endl;

    return 0;
}

答案 7 :(得分:0)

             ***//here is the simple solution to find reverse of a function***  
#include<iostream.h>
#include<conio.h>
void main()
{
 int n,a,c,d,b;
clrscr();
cout<<"enter five integers";

 cin>>n;
 a=n/10000;
 n=n%10000;
 b=n/1000;
 n=n%1000;
 c=n/100;
 n=n%100;
 d=n/10;
 n=n%10;
 cout<<"number in reverse order is"<<n<<d<<c<<b<<a;
 getch();
 }