zoukankan      html  css  js  c++  java
  • 高精度乘法-17南宁区域赛F -The Chosen One

    题目大意:给你一个n,然后从1~n隔一个选一个,挑出一个集合然后从集合中继续隔一个挑一个,直到只有一个数,问最后一个数是多少?2<=n<=1050

    例如n=5,先选出2,4最后选择4。n=12,先选出2,4,6,8,10,12,再选出4,8,12在选出8。

    可以发现这个数字一定是偶数,并且是比n小中被2除最多次的一个数,所以发现就是找一个2的幂次的小于n的最大的数。代码如下:

     

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    string a[100005];
    int t[1000005];
    bool judge(string n,string a)
    {
        if(n.size()<a.size())
            return true;
        else if(n.size()==a.size())
        {
            for(int i=0; i<a.size(); i++)
            {
                if(n[i]<a[i])
                    return true;
                if(n[i]>a[i])
                    return false;
            }
        }
        return false;
    }
    
    string fun(string a)
    {
    
        memset(t,0,sizeof(t));
        for(int i=1; i<=a.size(); i++)
            t[i]=(a[a.size()-i]-'0')*2;
        for(int i=1; i<=a.size(); i++)
            if(t[i]>=10)
            {
                t[i+1]+=t[i]/10;
                t[i]=t[i]%10;
            }
        int len=a.size()+1;
        string a1;
        while(t[len]==0)
        {
            len--;
        }
        for(int i=len; i>=1; i--)
        {
            a1+=('0'+t[i]);
        }
        return a1;
    }
    
    int main()
    {
        int t;
        cin>>t;
        string n;
        a[1]+='2';
        while(t--)
        {
            cin>>n;
            for(int i=1;; i++)
            {
                if(judge(n,a[i]))
                {
                    cout<<a[i-1]<<endl;
                    break;
                }
                else
                {
                    if(a[i+1].size()==0)
                        a[i+1]=fun(a[i]);
                }
            }
        }
    }

     

  • 相关阅读:
    Omi框架学习之旅
    Omi框架学习之旅
    Omi框架学习之旅
    加密解密
    RSA加密解密
    CMDB后台管理(AutoServer)
    CMDB Autoclient思路分析
    CMDB开发(需求分析)
    Django之model操作(续)
    Django之Model操作
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/10681714.html
Copyright © 2011-2022 走看看