zoukankan      html  css  js  c++  java
  • 牛客网上的最后一位

    题意:牛牛选择了一个正整数X,然后把它写在黑板上。然后每一天他会擦掉当前数字的最后一位,直到他擦掉所有数位。 在整个过程中,牛牛会把所有在黑板上出现过的数字记录下来,然后求出他们的总和sum.
    例如X = 509, 在黑板上出现过的数字依次是509, 50, 5, 他们的和就是564.
    牛牛现在给出一个sum,牛牛想让你求出一个正整数X经过上述过程的结果是sum.

    思路:

    1. 我们要找到一个数x,经过一系列擦掉最后一位操作后,和为564。

    2. 首先要确定x的位数,它一定是三位或两位(如果是四位,结果肯定是四位)。在此我们就假定它是三位数abc(就算最终结果是两位数,那么求出来a=0就可以了)。经过一系列擦操作之后:abc + ab + a = 564,

      即:(a * 100 + b * 10 + c) + (a * 10 + b) + (a) =564;

      即 :111 * a + 11 * b + 1 * c = 564

      我们想要求a、b、c,很简单,a = 564 // 111 = 5("//"表示取整操作)

      此时564 - 111 * 5 = 9。接下来要求b:b = 9//11 = 0

      此时 9 - 0 * 11 = 9。接下来要求c:c = 9//1 = 9

      最终结果5->0->9

    3. 扩展到四位数x,它的形式一定是1111 * a + 111 * b + 11 * c + 1* d = x

      同理扩展到n位数。

    #include <iostream>
    #include <string>
    #include <cmath>
    #include<iomanip>
    /*
    用例:
    837592744927492746
    对应输出应该为:
    -1
    你的输出为:
    753833470434743470
    */
    using namespace std;
    long long give(long long len);
    int main()
    {
        string sum;
        int a[100],top=0;
        long long num_sum=0;
        cin>>sum;
       // cout<<sum.size()<<endl;
        for(int i=0;i<sum.size();i++)
        {
           // int i=12;
            num_sum+=(sum[i]-'0')*pow(10.0,sum.size()-1-i);//break; 
          //  cout<<"i="<<setw(2)<<setfill('0')<<i<<"  "<<num_sum<<endl;
        }//当i=12时发生错误 
       // long long t=num_sum;
        cout<<num_sum;return 0;//为甚麽转化出来的整数是错的
        //sum_size=sum.size();
        for(long long i=sum.size();i>=1;i--)
        {
            a[top]=num_sum/give(i);
            num_sum=num_sum-a[top]*give(i);
            top++;
        }
        cout<<top<<'
    ';
        for(int i=0;i<top;i++)
        {
        if(a[i]>=10)
        {
        cout<<-1;return 0;
        }
        }
        for(int i=0;i<top;i++)
        {
        if(a[0]==0) continue;
        cout<<a[i];
        }
    }
    
    long long give(long long len)//提供len位1
    {
        long long sum=0;
        while(len-->0)
        {
            sum=sum*10+1;
        }
        return sum;
    }//837592744927492746
    不一样的烟火
  • 相关阅读:
    JSP,TOMCAT,JD,mysql环境搭建和连接数据库
    jsp基础学习记录
    将d盘根目录下的troydll.dll插入到ID为4000的进程中
    WebSocket内部原理
    基于流(Comet Streaming)
    短轮询
    DjangoWebSocket
    01WebSocket是什么
    Python实现WebSocket
    WebSocket
  • 原文地址:https://www.cnblogs.com/cstdio1/p/10952375.html
Copyright © 2011-2022 走看看