zoukankan      html  css  js  c++  java
  • PTA(Advanced Level)1023.Have Fun with Numbers

    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 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<bits/stdc++.h>
    using namespace std;
    struct bignumber
    {
    	int num[30];
    	int len;
    	bignumber()
    	{
    		memset(num, 0, sizeof(num));
    		len = 0;
    	}
    }a;
    void assignment(string s)
    {
    	for(int i=0;i<s.size();i++)
    		a.num[i] = s[s.size() - i - 1] - '0';
    	a.len = s.size();
    }	//字符串->数组
    
    bignumber multiply(bignumber a, int b)
    {
    	bignumber c;
    	int carry = 0;
    	for(int i=0;i<a.len;i++)
    	{
    		int t = a.num[i] * b + carry;
    		c.num[c.len++] = t % 10;
    		carry = t / 10;
    	}
    	while(carry != 0)	//到最高位的时候仍有可能进位
    	{
    		c.num[c.len++] = carry % 10;
    		carry /= 10;
    	}
    	return c;
    };
    int main()
    {
    	string s;
    	cin >> s;
    
    	assignment(s);
    	bignumber b = multiply(a, 2);
    
    
    	int origin[10], double_origin[10];
    	memset(origin, 0, sizeof(origin));
    	memset(double_origin, 0, sizeof(double_origin));
        for(int i=0;i<a.len;i++)
    		origin[a.num[i]]++;		//统计a用的数字的次数
    	for(int i=0;i<b.len;i++)
    		double_origin[b.num[i]]++;	//统计b用的数字的次数
    	if(a.len != b.len)		//最基本要达到的是长度相等
    	{
    			cout << "No" << endl;
    			for(int j=b.len-1;j>=0;j--)    cout << b.num[j];
    			return 0;
    	}
    
    
    	for(int i=0;i<10;i++)
        {
    		if(origin[i] != double_origin[i])
    		{
    			cout << "No" << endl;
    			for(int j=b.len-1;j>=0;j--)    cout << b.num[j];
    			return 0;
    		}
        }
    	cout << "Yes" << endl;
    	for(int j=b.len-1;j>=0;j--)    cout << b.num[j];
    	return 0;
    }
    
    
    引用

    https://pintia.cn/problem-sets/994805342720868352/problems/994805478658260992

  • 相关阅读:
    CXF调用webservice超时设置
    CSRF攻击测试及防御
    RMS去除在线认证
    Tuning 05 Sizing other SGA Structure
    Tuning 04 Sizing the Buffer Cache
    Oracle Tuning ( instance 级别 ) 01
    oracle tuning 工具
    Oracle Tuning 总括
    Transporting Data Between Database
    RMAN Restore, Recovery
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/12552315.html
Copyright © 2011-2022 走看看