微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EASY_ZJU_PAT_ADVANCED LEVEL_1023 大数乘法

1023. Have Fun with Numbers (20)

时间限制
400 ms
内存限制
32000 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN,Yue

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 k 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 file 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
 
 
/************************************************
@ AUTHOR: GAOMINQUAN
@ DATA: 2014 - 2 - 24
@ MAIL: ENSOLEILLY@GMAI.COM
@ HARD: EASY **


/************************************************/




#include<iostream>
#include<vector>
#include<string>
#include<algorithm>


using namespace std;




vector<int> reverse_vector(vector<int> perVec){
int length = perVec.size() - 1;


for(int i = 0; i<=length/2; i++){  //NOTICE IT'S LIKE THE PRIMER CAculaTE,< AND <=
swap(perVec[i],perVec[length-i]);
}
return perVec;
}


vector<int> change_to_bits(string inputNum){
vector<int> bits;
for(int stringI = 0; stringI < inputNum.size(); stringI++){
int tempBits = inputNum[stringI] - '0';
bits.push_back(tempBits);
}


return bits;
}


vector<int> mutiply(vector<int> numbers){
bool addBit = false;
vector<int> doubleNum;
for(int i = numbers.size() - 1; i>=0; i--){
int tempDouble = numbers[i] * 2 + addBit;
if(tempDouble>9){
tempDouble -= 10;
addBit = true;
}else{
addBit = false;
}
doubleNum.push_back(tempDouble);
}
if(addBit){
doubleNum.push_back(addBit);  //NOTICE HERE !!!!!
}
return doubleNum;
}


bool checkSame(vector<int> v1,vector<int> v2){
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());


bool same = (v1.size() == v2.size());


if(v1.size() == v2.size()){
for(int i = 0; i<v1.size(); i++){
if(v1[i] != v2[i]){
same = false;
break;
}
}
}


return same;
}




int main(){
string input = "123456789";

cin>>input;


string outputs[] = {"No","Yes"};


vector<int> bits = change_to_bits(input);


//vector<int> doubleBits = mutiply(bits);
vector<int> doubleBits = reverse_vector(mutiply(bits));
cout<<outputs[checkSame(bits,doubleBits)]<<endl;


for(int i = 0; i<doubleBits.size(); i++){
cout<<doubleBits[i];
}cout<<endl;



return 0;
}




版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐