我必须编写一个程序,其中用户输入一些数字,并且该程序必须交换最后一位的第一位数字。
例如,用户输入: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");
}
答案 0 :(得分:4)
帮我解决这个问题。
好的,我会做的。
您要执行的操作不在输入数字的值上,而是在其表示形式上,尤其是在基数10中。我们最好选择一个然后进行字符串操作。
在C ++ 11及更高版本中,我们确实拥有std::to_string
:接受一个整数,返回一个字符串,完成。
如果字符串不为空,则std::string::front()
和std::string::back()
返回对该字符串的第一个和最后一个字符的引用,很容易。
我们有实用程序std::swap
和交换惯用法
using std::swap;
swap(lhs, rhs);
lhs
和rhs
是需要交换的内容(请参阅步骤2。)。
我们有std::stoi
做std::to_string
所做的事情,但相反,是完成了。但是,如果新整数变得太大而无法由整数类型保存怎么办?
让我们定义一个(免费的)功能!
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';
}