• hdu 4608 I-number(13多校#1 ,1009)


    题目地址http://acm.hdu.edu.cn/showproblem.php?pid=4608

    题目分析:  大整数,可以考虑java BigInteger(好像tle?)  这个题的思路是逐步调整,构造一个例子,得到一个比较小的范围,然后暴力就可以了。

                          我们首先把这个整数加到末尾是0,进位完成以后,取出除了最后一位,每一位求和,看mod10 余数多少,不管是多少,直接用10-这个数(如果得到10改成0),加到最后一位肯定不会进位,构造完成。这样会发现我们要找的数和原来的数之间的差距不会超过18,然后一一暴力就可以。


    注意要点:1如果这个数不行,还有恢复数组原来的状态 (recover()干的事情)

                        2 a[i++]=c[i] ,给最高位进位的空间。


    代码

    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    
    using namespace std;
    char  c[100010];
    int   a[100010];
    int n;
    
    void deal()
    {
      for(int i=n;i>=1;i--)
       if(a[i]>9)
       {
          a[i]-=10;
          a[i-1]++;
       }
    }
    
    bool  right()
    {
        int sum=0;
        for(int i=n;i>=0;i--)
          sum+=a[i];
        if(sum%10==0)  return 1;
        else return 0;
    
    }
    
    void recover()
    {
    
       for(int i=0;i<n;i++)
         a[i+1]=c[i]-'0';
         a[0]=0;
    
    }
    int main()
    {
       int size;
       cin>>size;
    
       for(int l=0;l<size;l++)
       {
    
       cin>>c;
       n=strlen(c);
    
       recover();
    
       for(int i=1;i<=20;i++)
       {
          a[n]+=i;
          if(a[n]>9)  deal();
          if(right())
          {
              if(a[0]==1) cout<<1;
              for(int i=1;i<=n;i++)
                cout<<a[i];
              cout<<endl;
              break;
          }
    
          else recover();
    
       }
    
       }
    }




  • 相关阅读:
    HDU1006
    白话经典算法系列之六 高速排序 高速搞定
    pca算法
    硬件这碗饭有那么好吃吗?
    《学会等待》有感
    oracle execute immediate
    HDU 2059 龟兔赛跑
    C++ Tricks(一)—— 判断字符串 string 对象的所有字符都相等
    辨异 —— 数学基本概念
    辨异 —— 数学基本概念
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3217946.html
Copyright © 2020-2023  润新知