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

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

题目描述

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

输入描述:

输入包括正整数sum(1 ≤ sum ≤ 10^18)

输出描述:

输出一个正整数,即满足条件的X,如果没有这样的X,输出-1。 解题思路:

经过一系列擦操作之后:abc + ab + a = 564;

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

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

对于四位数有1111*a+11*b+1*c+*d=x;

首先0<a<10,b<10,c<10,d<10;

可以给出一个求len位1的函数

之后x再减去len位1*a,相同的方法可以求得b

代码如下:

#include 
#include
#include
#include
/*用例:837592744927492746对应输出应该为:-1你的输出为:753833470434743470*/using namespace std;long long give(int len);int main(){ string sum; int a[100],top=0; long long num_sum=0; cin>>sum; for(int i=0;i
10 //当i=0时num_sum=799999999999999999为甚麽不是800000000000000000 // long long t=num_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
=3;i--)// cout<
<
0) { sum=sum*10+1; } return sum;}//837592744927492746

 

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

你可能感兴趣的文章
Windows Server2016 Hyper-v Cluster部署
查看>>
juniper路由器配置
查看>>
jQuery一点一滴系列教程(第三点)
查看>>
ARP解决方法/工具 真假ARP防范区别方法 ARP终极解决方案
查看>>
系统数据权限的实现方案
查看>>
华为vlan划分,单臂路由以及静态路由
查看>>
UCD 2010百度工作坊
查看>>
ssh2免密码登录
查看>>
4_move_find_into_model
查看>>
MySQL · 捉虫动态 · UK 包含 NULL 值备库延迟分析
查看>>
windows server 2012 standard Evaluation 安装试用
查看>>
windows server 2008中配置TCP/IP
查看>>
网管必读:交换机技术简介及应用分析
查看>>
.NET多线程编程(9)——Thread类
查看>>
HP DL380G6上安装配置Vmware_ESXI4.1
查看>>
单IP无TMG拓扑Lync Server 2013:活动目录
查看>>
3.VMware vsphere 5.0新体验-安装VMware Center
查看>>
趣题: 一道面试题的解法
查看>>
Java Scoket之java.io.EOFException解决方案
查看>>
Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…
查看>>