博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客网上的最后一位
阅读量:6330 次
发布时间:2019-06-22

本文共 1229 字,大约阅读时间需要 4 分钟。

题意:牛牛选择了一个正整数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 
#include
#include
#include
/*用例: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<
<
=1;i--) { a[top]=num_sum/give(i); num_sum=num_sum-a[top]*give(i); top++; } cout<
<<'\n'; for(int i=0;i
=10) { cout<<-1;return 0; } } for(int i=0;i
0) { sum=sum*10+1; } return sum;}//837592744927492746

 

转载于:https://www.cnblogs.com/cstdio1/p/10952375.html

你可能感兴趣的文章
c++ primer plus 学习笔记
查看>>
HTML5仿微信聊天界面、微信朋友圈实例
查看>>
关于建造模式
查看>>
使用MASM09 - Win32汇编语言017
查看>>
Foundation 框架 归档
查看>>
MySQL联表查询
查看>>
Qt笔记之使用设计器自定义窗口标题栏
查看>>
python string模块
查看>>
密码学概念
查看>>
【原】ORA-31626问题小计
查看>>
创建应用程序快捷方式
查看>>
处事二十二
查看>>
【2777】小P的故事——神奇的换零钱 (sdut)
查看>>
Five Errors Customers Make When Installing E-Business Suite 12[1]
查看>>
node.js发送邮件
查看>>
Eclipse的java代码出错:The import org.apache cannot be resolved
查看>>
C# 创建系统服务并定时执行【转载】
查看>>
用Vue来实现音乐播放器(十六):滚动列表的实现
查看>>
基于Dlib、OpenCV开发人脸识别程序的开发建议
查看>>
事件处理
查看>>