首先与最后交换

时间:2019-02-01 14:35:03

标签: c++ visual-studio

我必须编写一个程序,其中用户输入一些数字,并且该程序必须交换最后一位的第一位数字。

例如,用户输入:12345
预期的输出将是:52341
但是我遇到一个错误,并得到如下输出:4465

这是我的代码:

#include <iostream>
#include <cmath>
using namespace std;

void main()
{ int num,ln,fn,pw,dg,swap;
    cin >> num;
    ln = num%10 ;
    dg = log10(num);
    pw = pow(10,dg);
    fn = num%pw;
    swap = ln*pw;
    swap = swap+num/pw;
    swap = swap-ln;
    swap = swap+fn;
    cout << swap << endl;
    system ("pause");
} 

2 个答案:

答案 0 :(得分:4)

  

帮我解决这个问题。

好的,我会做的。

0。设计选择

您要执行的操作不在输入数字的上,而是在其表示形式上,尤其是在基数10中。我们最好选择一个然后进行字符串操作。

1。整数到字符串

在C ++ 11及更高版本中,我们确实拥有std::to_string:接受一个整数,返回一个字符串,完成。

2。从字符串访问字符

如果字符串不为空,则std::string::front()std::string::back()返回对该字符串的第一个和最后一个字符的引用,很容易。

3。交换字符

我们有实用程序std::swap和交换惯用法

using std::swap;
swap(lhs, rhs);

lhsrhs是需要交换的内容(请参阅步骤2。)。

4。返回整数

我们有std::stoistd::to_string所做的事情,但相反,是完成了。但是,如果新整数变得太大而无法由整数类型保存怎么办?

5。放在一起

让我们定义一个(免费的)功能!

int reverse_border_digits(int value)
{
    // steps 1 through 4
    return result;
}

答案 1 :(得分:2)

这是满足OP要求的答案

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int num;
    cin >> num;
    int dg = (int)(log10(num + 0.000001)); // add small delta to avoid any possible rounding error on an exact power of ten
    int pw = (int)round(pow(10.0, dg));
    int swap = (num % 10) * pw + (num - num % 10 - (num / pw) * pw) + num / pw;
    cout << swap << '\n';
}