EASY_ZJU_PAT_ADVANCED LEVEL_1023 大数乘法
2014-02-24 18:44
393 查看
1023. Have Fun with Numbers (20)
时间限制400 ms内存限制32000 kB代码长度限制16000 B判题程序Standard作者CHEN, YueNotice 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 differentpermutation. 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:1234567899Sample 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,veca782tor<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;}
相关文章推荐
- EASY_PAT_ZJU_ADVANCED LEVEL_1011 尽量用Vector代替Array,这样会方便很多
- EASY_PAT_ZJU_ADVANCED LEVEL 1015 进制转换 素数
- EASY_ZJU_PAT_Advanced Level_1046 寻找最多子串
- PAT 1023. Have Fun with Numbers (20) 模拟大数乘法
- EASY_ZJU_PAT_ADVANCED LEVEL 1005
- EASY_ZJU_PAT_ADVANCED LEVEL_1027 任意进制转换
- EASY_ZJU_PAT_ADVANCED LEVEL 1050 高效输入含有空格的字符串 高效删除字符串中的字符
- EASY_PAT_1065 用Java的BigInteger类解决大数问题
- PAT 甲级 1023. Have Fun with Numbers(大数的两倍运算)
- 1023. 组个最小数 (20) (数学啊 ZJU_PAT)
- HDU 1023 大数与int小数 乘法 除法!!!!!!!!!!!!!
- EASY_PAT_ADVANCED LEVEL 1008_简单的面向对象 队列的使用
- EASY_PAT_ZJU_1046 求循环数字公路中两个出口的最短距离
- EASY_ZJU_PAT ADVANCED LEVEL_1031 仔细分析,删繁就简
- EASY_PAT_ADVANCED LEVEL 1058 A+B IN HOGWART 不同进制数字的加法运算
- ZJU PAT 1023 组个最小数
- ZJU PAT 1023
- PAT甲题题解-1023. Have Fun with Numbers (20)-大数加法
- 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)
- 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)