PAT_自测4_Have Fun with Numbers
2016-11-25 15:06
246 查看
题目: https://pta.patest.cn/pta/test/17/exam/4/question/263
自测-4 Have Fun with Numbers (20分)
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different
permutation. Check to see the result if we double it again!
Now you are suppose to check if there are more numbers with this property. That is, double a given number with kk digits,
you are to tell if the resulting number consists of only a permutation of the digits in the original number.
Each input contains one test case. Each case contains one positive integer with no more than 20 digits.
For each test case, first print in a line "Yes" if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or "No" if not. Then in the next line, print the doubled number.
题意&解题; case是 不超过20位,所以自带数据类型不足,需要写一个用数组表示的大数加乘函数。
/**
* https://pta.patest.cn/pta/test/17/exam/4/question/263 * 数据结构练习 00-自测4. Have Fun with Numbers (20)
*/
#include <iostream>
#include <string>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
string multipleNum(string str, int n);
bool compareStr(string str1, string str2);
int main(int argc, char const *argv[])
{
string str, result;
cin >> str;
// str = "012345678990";
result = multipleNum(str, 2);
bool isSame = compareStr(str, result);
if(isSame){
cout<<"Yes\n"<<result<<endl;
}else{
cout<<"No\n"<<result<<endl;
}
return 0;
}
string multipleNum(string str, int n) //n<10
{
int addIn = 0; //进位
int length = str.size();
string strReturn = "";
for(int pos = length-1; pos>=0; pos--){
int num = (int)(str[pos] - '0'); //str[pos]是char格式,用ASCII记录
int result = num * n + addIn;
addIn = result/10;
result = result%10;
strReturn.insert((string::size_type)0,1,result+'0');
}
if(0!=addIn){
strReturn.insert((string::size_type)0,1,addIn+'0');
}
return strReturn;
}
bool compareStr(string str1, string str2){
if(str1.size() != str2.size())
return false;
int length = str1.size();
int count1[10] = {0};
int count2[10] = {0};
for( int i = 0 ; i < length ; i++ )
{ //对str计算,最大length为str.size()
count1[str1[i]-'0']++;
count2[str2[i]-'0']++;
}
for( int i = 0 ; i < 10 ; i++ )
{ //对array比较,最大length为10 - [0,9]
// cout<<count1[i]<<" i="<<i<<" "<<count2[i]<<endl;
// if((count1[i] - count2[i]) <0)
if( count1[i] != count2[i] )
return false;
}
return true;
}
自测-4 Have Fun with Numbers (20分)
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different
permutation. Check to see the result if we double it again!
Now you are suppose to check if there are more numbers with this property. That is, double a given number with kk digits,
you are to tell if the resulting number consists of only a permutation of the digits in the original number.
Input Specification:
Each input contains one test case. Each case contains one positive integer with no more than 20 digits.
Output Specification:
For each test case, first print in a line "Yes" if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or "No" if not. Then in the next line, print the doubled number.Sample Input:
1234567899
Sample Output:
Yes 2469135798
题意&解题; case是 不超过20位,所以自带数据类型不足,需要写一个用数组表示的大数加乘函数。
/**
* https://pta.patest.cn/pta/test/17/exam/4/question/263 * 数据结构练习 00-自测4. Have Fun with Numbers (20)
*/
#include <iostream>
#include <string>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
string multipleNum(string str, int n);
bool compareStr(string str1, string str2);
int main(int argc, char const *argv[])
{
string str, result;
cin >> str;
// str = "012345678990";
result = multipleNum(str, 2);
bool isSame = compareStr(str, result);
if(isSame){
cout<<"Yes\n"<<result<<endl;
}else{
cout<<"No\n"<<result<<endl;
}
return 0;
}
string multipleNum(string str, int n) //n<10
{
int addIn = 0; //进位
int length = str.size();
string strReturn = "";
for(int pos = length-1; pos>=0; pos--){
int num = (int)(str[pos] - '0'); //str[pos]是char格式,用ASCII记录
int result = num * n + addIn;
addIn = result/10;
result = result%10;
strReturn.insert((string::size_type)0,1,result+'0');
}
if(0!=addIn){
strReturn.insert((string::size_type)0,1,addIn+'0');
}
return strReturn;
}
bool compareStr(string str1, string str2){
if(str1.size() != str2.size())
return false;
int length = str1.size();
int count1[10] = {0};
int count2[10] = {0};
for( int i = 0 ; i < length ; i++ )
{ //对str计算,最大length为str.size()
count1[str1[i]-'0']++;
count2[str2[i]-'0']++;
}
for( int i = 0 ; i < 10 ; i++ )
{ //对array比较,最大length为10 - [0,9]
// cout<<count1[i]<<" i="<<i<<" "<<count2[i]<<endl;
// if((count1[i] - count2[i]) <0)
if( count1[i] != count2[i] )
return false;
}
return true;
}
相关文章推荐
- PAT-中国大学MOOC-陈越、何钦铭-数据结构基础习题集 00-自测4. Have Fun with Numbers (20) 【二星级】
- 自测4. Have Fun with Numbers
- PAT甲级 1023. Have Fun with Numbers (20)
- PAT1023. Have Fun with Numbers (20)
- Pat(Advanced Level)Practice--1023(Have Fun with Numbers)
- [PTA MOOC] 自测-4 Have Fun with Numbers(20 分)
- 1023. Have Fun with Numbers (20)-PAT甲级真题(大整数运算)
- PAT 甲级 1023. Have Fun with Numbers(大数的两倍运算)
- PAT Have Fun with Numbers
- PAT甲级练习题A1023. Have Fun with Numbers (20)
- 自测04——Have Fun with Numbers
- zju pat 1023 Have Fun with Numbers
- 00-自测4. Have Fun with Numbers (20)
- pat 1023. Have Fun with Numbers (大水)
- PAT甲题题解-1023. Have Fun with Numbers (20)-大数加法
- 【PAT】1023. Have Fun with Numbers
- PAT (Advanced Level) Practise 1023 Have Fun with Numbers (20)
- 浙大PAT 1023题 1023. Have Fun with Numbers
- 【PAT】【Advanced Level】1023. Have Fun with Numbers (20)
- PAT (Advanced Level) Practise 1023. Have Fun with Numbers (20)