C++中常见的数据范围:
int: -2 * 10e9 ~ 2 * 10e9
long long: -9 * 10e18 ~ 9 * 10e18
高精度加法核心代码
for (int i = 0; i < a.size(); i++) { int s = a[i] + a[i] + t; b.push_back(s % 10); t = s / 10; }题目
请注意,数字 123456789 是一个 9 位数字,完全由 1 到 9
组成,没有重复。
将其加倍,我们将获得 246913578
,它恰好是另一个 9 位数字,恰好由 1 到 9
组成,只是排列不同。
现在,给定你一个 k
位的数字,请你判断将其加倍以后得到的数字是否可以由原数字的各数位重新排列得到。
输入格式
共一行,包含一个整数。
输出格式
输出共两行
如果原数字的各数位重新排列可以得到加倍后的数字,则在第一行输出 Yes,否则输出 No。
第二行,输出加倍后得到的数字。
数据范围
输入数字不超过 20
位。
输入样例:
1234567899
输出样例:
Yes
2469135798
#include#include #include #include using namespace std; typedef long long LL; int main() { string A; vector a; cin >> A; for (int i = A.size() - 1; i >= 0; i--) a.push_back(A[i] - '0'); vector b; int t = 0; for (int i = 0; i < a.size(); i++) { int s = a[i] + a[i] + t; b.push_back(s % 10); t = s / 10; } if (t) b.push_back(t); vector c = b; sort(a.begin(), a.end()); sort(c.begin(), c.end()); if (a == c) puts("Yes"); else puts("No"); for (int i = b.size() - 1; i >= 0; i--) cout << b[i]; return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)