浙大pat | 浙大pat牛客网乙级1009
2018-03-07 18:47
429 查看
1009 | 1019. 数字黑洞 (20) | 2565 | 10433 | 24% |
一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
例如,我们从6767开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
现给定任意4位正整数,请编写程序演示到达黑洞的过程。
输入描述:
输入给出一个(0, 10000)区间内的正整数N。
输出描述:
如果N的4位数字全相等,则在一行内输出“N - N = 0000”;否则将计算的每一步在一行内输出,直到6174作为差出现,输出格式见样例,每行中间没有空行。注意每个数字按4位数格
式输出。
输入例子:
6767
输出例子:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
浙大Pat乙级的题目都不难,就是非常的复杂,正好锻炼一下写代码的速度
这一题的知识点有,使用sort对string进行排序,cmp的参数应该是char而不是string,在把char转换成int的时候和把int转换成char的时候一定要记住,减去‘0’和加上’0’这一点,老是容易忘记,还有setw(4)和setfill(“0”)貌似只能生效一个数字,假如需要持续生效的话需要每次输出一个数字都写一句!
另外这一题还有一个知识点就是使用string做大数减法或者是大数加法的时候要怎么写!
#include<iostream>
#include<string>
#include<iomanip>
#include<algorithm>
using namespacestd;
bool cmp(char&a, char &b)
{
return a > b;
}
stringsubTrac(string a, string b)
{
string tmp = "0000"; int carry = 0;
for (int i = 3; i >= 0; i--)
{
if (a[i] - '0' + carry >= b[i] -'0')
{
tmp[i] = (a[i] - '0' + carry -(b[i] - '0')+'0');
carry = 0;
}
else
{
tmp[i] = ((a[i] - '0') +carry+10 - (b[i] - '0')+'0');
carry = -1;
}
}
return tmp;
}
stringout6147(string num)
{
string a = num;
string b = num;
sort(a.begin(), a.end(), cmp);
sort(b.begin(), b.end());
string c = subTrac(a, b);
cout << a << " - "<< b << " = " << c << endl;
return c;
}
int main() {
int num,tmp;
cin >> num;
tmp = num;
string numStr;
for (int i = 0; i < 4; i++)
{
numStr.push_back(tmp % 10+'0');
tmp /= 10;
}
swap(numStr[0], numStr[3]);
swap(numStr[1], numStr[2]);
cout << setw(4) <<setfill('0');
if (numStr[0] == numStr[1]&&numStr[1] == numStr[2]&& numStr[2] == numStr[3])
{
cout << numStr << "- " << numStr << "= " << "0000";
return 0;
}
while((numStr=out6147(numStr))!="6174");
return 0;
}
相关文章推荐
- PAT1096--浙大2015机试题--Consecutive Factors (20)
- * 浙大PAT甲级 1043
- 浙大PAT甲级 1050
- 浙大ZOJ PAT practice – 1005
- 浙大PAT 1001题 1001. A+B Format
- 浙大PAT 1031题 1031. Hello World for U
- 浙大PAT (Advanced Level) Practise 1008 Elevator (20)
- 解决浙大PAT用JAVA返回非零以及运行超时异常
- 浙大 pat 1003 题解
- 浙大pat 1003
- 【C++】浙大basic level PAT 代码1001,1002,1003
- 【C++】浙大PAT (Basic Level)1009. 说反话 (20)
- 浙大PAT 1024题 1024. Palindromic Number
- 浙大PAT 1059题 1059. Prime Factors
- 浙大PAT 1045. 快速排序(25)
- 浙大PAT 1071题 1071. Speech Patterns
- 浙大 pat Basic Level 1007
- 浙大 pat Basic Level 1020
- 浙大pat1030
- 浙大PAT1059 Prime Factors