当前位置:编程学习 > C/C++ >>

PAT-1023. Have Fun with Numbers (20)

分析:简单题。用俩个数组标记数字0~9出现的数次就可以了。
题目描述:
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
 
#include<iostream>  
#include<string.h>  
using namespace std;  
#define max 22  
char input[max];  
int flag_1[11];  
int flag_2[11];  
int s[max];  
bool isSame = true;  
  
int main()  
{  
    int len,i,j,temp;  
    int jinwei; //进位  
    //清零  
    memset(flag_1,0,sizeof(flag_1));  
    memset(flag_2,0,sizeof(flag_2));  
  
    cin>>input;  
    len = strlen(input);   
    for(j=0,i=len-1; i>=0; i--,j++)  
    {  
        s[j] = input[i] - '0';    
        flag_1[ s[j] ] ++;  
    }  
  
    jinwei = 0; //进位      
    //乘以2  
    for(i=0; i<len; i++)  
    {  
        temp = ( s[i]*2 + jinwei )/10;  
        s[i] = (s[i]*2 + jinwei)%10;  
        flag_2[ s[i] ] ++;  
        jinwei = temp;  
    }  
  
    for(j=1; j<=10; j++)  
    {  
        if(flag_2[j] != flag_1[j])  
        {  
            isSame = false;  
            break;  
        }  
    }  
    if(isSame) cout<<"Yes"<<endl;  
    else cout<<"No"<<endl;  
  
    //输出  
    if(jinwei > 0) { j=i; s[i] = jinwei;} //最高位有进位  
    else j = --i;  
  
    for(; j>=0; j--)  
    {  
        cout<<s[j];  
    }  
    cout<<endl;  
      
      
    return 0;  
}  

 

 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,