将第一个替换为最后一个
Swap first with Last
我必须编写一个程序,其中用户输入一些数字,程序必须将第一位数字与最后一位数字进行交换。
例如,用户输入: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::stoi
做std::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';
}
相关文章:
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 获取用C/C++打印的最后一个字符串
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 为什么我的最后一个 ELSE 条件无法正确执行
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 仅显示链表的最后一个元素
- 测试迭代器是否位于列表中的最后一个
- push_back通过自行创建的对象获取最后一个元素的向量
- 使用 map.end() 访问 map 的最后一个元素
- 如何知道地图中的最后一个元素是否被删除?
- std::矢量保存 只推送最后一个元素
- 反转后不返回最后一个元素
- 如何删除矢量中的重复值,最后一个除外
- 如何在写入文件时擦除最后一个逗号
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 将第一个替换为最后一个
- 输出流中的第一个字符将替换为该流中被删除的最后一个字符.为什么会这样