64 lines
1.5 KiB
C++
64 lines
1.5 KiB
C++
#include<bits/stdc++.h>
|
||
|
||
using namespace std;
|
||
|
||
const int N = 10;
|
||
int a[N], cnt;
|
||
|
||
//求反数:数位分离数字,然后想办法再级成大数字
|
||
void FanShu_ShuWeiFenLi(int x) {
|
||
int t = x;
|
||
//数位分离到一个数组中
|
||
//12345--->[5,4,3,2,1]=5*10000+4*1000+3*100+2*10+1*1=54321
|
||
while (t) {
|
||
int m = t % 10;
|
||
a[cnt++]= m;
|
||
t /= 10;
|
||
}
|
||
//打印出这个数组
|
||
for (int i = 0; i < cnt; i++)cout << a[i];
|
||
|
||
//方法(1):通过数学公式pow拼成一个大数字
|
||
int ans = 0;
|
||
//5,4,3,2,1=5*10000
|
||
//10^4
|
||
//cnt=5
|
||
//cnt-1
|
||
//cnt-i-1
|
||
for (int i = 0; i < cnt; i++)
|
||
ans += a[i] * pow(10, cnt - i - 1);
|
||
//分析一下为什么是cnt-i-1
|
||
cout << ans << endl;
|
||
|
||
//方法(2):利用频繁的累乘方式拼成一个大数字
|
||
ans = 0;//12345-->54321
|
||
//5*10=50--+4>54
|
||
//54*10=540+3=543
|
||
//543*10=5430+2=5432
|
||
//5432*10+1=54321
|
||
for (int i = 0; i < cnt; i++)
|
||
ans = ans * 10 + a[i];
|
||
cout << ans << endl;
|
||
|
||
//方法(3):利用字符串转换
|
||
string s = "";
|
||
for (int i = 0; i < cnt; i++) s += to_string(a[i]);
|
||
cout << s << endl;
|
||
}
|
||
|
||
//利用原始字符串反转进行
|
||
void FanShu_ByString(int x) {
|
||
string a = to_string(x);
|
||
reverse(a.begin(), a.end());
|
||
cout << a << endl;
|
||
}
|
||
|
||
int main() {
|
||
//测试一个数字
|
||
FanShu_ShuWeiFenLi(12345);
|
||
//利用原始字符串反转进行
|
||
FanShu_ByString(12345);
|
||
return 0;
|
||
}
|
||
|