将第一个替换为最后一个

Swap first with Last

本文关键字:最后一个 替换 第一个      更新时间:2023-10-16

我必须编写一个程序,其中用户输入一些数字,程序必须将第一位数字与最后一位数字进行交换。

例如,用户输入: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.设计选项

您要执行的操作不是针对输入数字的,而是针对其表示(特别是以10为基数)。那我们最好做个字符串操作。

1.字符串的整数

对于C++11和以下内容,我们确实有std::to_string:取一个整数,返回一个字符串,完成。

2.访问字符串中的字符

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

3.交换字符

我们有实用程序std::swap和交换习语

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

CCD_ 8和CCD_

4.返回整数

我们让std::stoistd::to_string做的事情,但反过来,做了。但是,如果新的整数变得太大,无法由整数类型保存,该怎么办?

5.综合考虑

让我们定义一个(自由)函数!

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

以下是满足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';
}