C ++ for循环可反转数字10-99

时间:2018-09-26 04:58:37

标签: c++

我正在尝试编写列出和反转01-99中所有数字对的代码。01-09很简单,因为您只需将其乘以10。我也知道至少一种反转给定数字的方法,我只是不知道如何在for循环中正确使用它。

这是我到目前为止所拥有的。

 for ( int num99 =1 ; num99 > 0 && num99 < 100; num99 = num99+1)
            {
                if (num99 <10){
                    temp99 = num99 * 10;
                    cout << temp99 << endl;
                }
                else {
                    while (num99 != 0) {
                        remainder99 = num99 % 10;
                        reverse99 = (reverse99 * 10) + remainder99;
                        num99 = num99 / 10;
                    }
                    cout << reverse99 << endl;
                }
            }

谢谢您的帮助。

4 个答案:

答案 0 :(得分:0)

您要尝试执行的操作是对循环变量进行操作,这会导致意外结果。而是将循环变量和num99变量分开,如下所示:

    for (int i = 1; i < 100; i++) {
        int num99 = i;

        if (num99 < 10) {
            temp99 = num99 * 10;
            cout << temp99 << endl;
        } else {
            remainder99 = num99 % 10;
            num99 = num99 / 10;
            if (remainder99 == 0) {
                cout<<"0"<<num99<<endl;
            } else {
                reverse99 = remainder99 * 10 + num99;
                cout << reverse99 << endl;
            }
        }
    }

我也冒昧地假设,当您反转1020等两位数字时,您希望输出为01,{{1} },这样,如果这不是您期望的,则可以删除02条件。

答案 1 :(得分:0)

使用if的值后,必须重新初始化它们。
当您反转10、20、30等...以获得01、02、03等...时,还必须在结果前加上0。
进行必要的更改后,您的程序将如下所示。

remainder99, reverse99, temp99, num99

输出为:

#include<iostream>
using namespace std;

int main(void)
{  
  int remainder99 = 0;
  int reverse99 = 0;
  int temp99 = 0;  

  for ( int num99 =1 ; num99 > 0 && num99 < 100; num99 = num99+1)
    {
        if (num99 <10){
            temp99 = num99 * 10;
            cout << temp99 << endl;
        }
        else {
            temp99 = num99;
            while (num99 != 0) {
                remainder99 = num99 % 10;
                reverse99 = (reverse99 * 10) + remainder99;
                num99 = num99 / 10;
            }
            if(reverse99 < 10) cout << 0;
            cout << reverse99 << endl;
            reverse99 = 0;
            remainder99 = 0;
            num99 = temp99;
        }
    }
    return 0;
}

答案 2 :(得分:0)

提到的代码有很多问题,例如

  1. 这里reverse99 * 10reverse99的初始值?将其分配为0
  2. num99 = num99 / 10;中,您要修改原始num99的外部循环变量,而不是将num99分配给某些临时变量并对该临时变量执行操作。

示例代码

int main(void) {
  int temp99 = 0,remainder99 = 0, reverse99 = 0/* must initialize with 0 */ ;
  for ( int num99 =1 ; num99 > 0 && num99 < 100; num99 += 1) {
    if (num99 <10){
      temp99 = num99 * 10; 
      std::cout << num99 << std::endl;
    }
    else {
      reverse99 = 0;/*make it as 0 again for every iteration */
      temp99 = num99; /* assign loop variable to temp99 & do the operation with that */
      while (temp99 != 0) {
        remainder99 = temp99 % 10;
        reverse99 = (reverse99 * 10) + remainder99;
        temp99 /= 10;
      }
      std::cout << reverse99 << std::endl;

    }
  }
  return 0;
}

答案 3 :(得分:0)

面向C ++ 11的解决方案:

#include <vector>
#include <iostream>
#include <numeric>
#include <algorithm>

int main()
{
    std::vector<int> in(99);
    std::iota(in.begin(), in.end(), 1);

    std::for_each(in.begin(), in.end(), [](int& i)
    {
        i = (i % 10)*10 + (i / 10);
    }
    );

    for (const auto& val : in)
    {
        std::string out = std::to_string(in);
        if (out.size() == 1)
        {
            out = '0' + out;
        }
        std::cout << out << std::endl;
    }
    return 0;
}