calfcamel的2333(java)
一、问题描述
为祝贺新一批的研究生入学,队长让大家为新人命题训练其程序设计能力。有人问队长能不能黑,队长说可以黑但是不能黑那啥。大家很失望 2333 ,于是 calfcamel 决定出一道 2333 的题目。
给你一个小于 60 位的整数 p ,求大于 p 的最小的数 p1 ,使得 p1 中包含数 2333 。
输入数据
输入数据的第一行为一个正整数 T ,表示有 T 组数据。随后的 T 行中每行包括一个小于 60 位的整数 p ( T <= 50 , 1 <= p <10^60 ,即 10 的 60 次方)。
输出数据
对每组输入数据单独输出一行结果,第 x 行结果形如 ”Case #x: a“ ,其中 x 为组号,从 1 开始, a 为对应的结果。
样例输入
2
100
1000000000000
样例输出
Case #1: 2333
Case #2: 1000000002333
二、解决方案:
题目要求输出比原数大的最小整数且包含2333,一定注意题目要求的是大于p,不包含等于,所以当你输入2333的时候应该返回12333,当输入23334的时候应该返回23335。最容易想到的方法就是在原数的基础上循环加1,直到新的数中包含2333为止。
那么我们该使用什么类型的数据呢?输入的整数p有可能达到60位,而我们知道int型变量占4个字节,32位,最大能表示的数为:2^32-1= 4 294 967 295;很显然是远远达不到的,那么long呢?long变量占8个字节,64位,最大能表示的数为2^64-1= 1.844674407371e+19 也是不够的,所以只能考虑使用String类型,这时候令人头疼的是如何使用String类型的变量能像整数那样加1且合理进位?
想象整数如何加1的,首先获取字符串的最后1位last,应该判断last是否为9,如果last为9,则将last=0,则last前面1位需要加1,前面1位加1之后就得到了新的数字,可以判断该数是否包含2333了,但是当前面1位也是9时,就要设置这一位为0,并继续将其前面一位加1,如此循环知道加到第一位,若第一位也为9,设置第一位为0,拼接在字符串前面一个1,并继续按照上面思路循环…
其中我们可以很轻松的得到若输入小于2333的数,一定输入2333,若输入数为4位且大于等于2333,则一定输入12333,故我们在加1循环之前可以先判断输入的整数p是否为小于4位的数,这样能提高计算效率。
三、核心代码
if (sdata.length() <= 4) {// 当数据位数为4位及以下时
int idata = Integer.parseInt(sdata);
if (idata < 2333) {
System.out.println(“Case #” + index + “: " + 2333);
} else {
System.out.println(“Case #” + index + “: " + 12333);
}
}
//字符串的加1函数
public static String add(String str){
char[] chars = str.toCharArray();
int len = chars.length;
for (int k = len - 1; k >= 0; k–) {//对字符串的位数循环,直到第一位
int a = Integer.parseInt(String.valueOf(chars[k]));
if (a == 9 && k!=0) {//当该位置数已经为9,且不是第一位,则需要将该位置0
chars[k] = ‘0’;
continue;//继续下一轮循环
} else if(a9&&k0){
//当该位置数已经为9,且是第一位,则需要将该位置0,且在字符串之前拼接上1,生成新的字符串,继续循环
chars[k] = ‘0’;
str=“1”+new String(chars);
chars = str.toCharArray();
len = chars.length;
// System.out.println(“newSdata->”+sdata+”,newLen->”+len);
break;
}else{//若该位不是9,则该位数加1,跳出循环,返回新的字符串
a++;
chars[k] = (char) (a + ‘0’);
str = new String(chars);
break;
}
}
return str;
}
calfcamel的2333(java)相关推荐
- calfcamel 的 2333
题面描述: 为祝贺新一批的研究生入学,队长让大家为新人命题训练其程序设计能力.有人 问队长能不能黑,队长说可以黑但是不能黑那啥.大家很失望 2333,于是 calfcamel 决定出一道 2333 的 ...
- GSON - JSON的拓展
GSON使用概述 GSON弥补了JSON的许多不足的地方,在实际应用中更加适用于Java开发.在这里,我们主要讲解的是利用GSON来操作java对象和json数据之间的相互转换,包括了常见的对象序列化 ...
- java游戏2333整合包,我的世界魔法荣耀
<我的世界魔法荣耀懒人包>是由玩家以神秘时代.魔法为主题进行整合的一款懒人包.该懒人包玩法丰富,加入了多种不同的有趣模组,玩家可以体验一个内容丰富的MC世界,去寻找昔日的魔法荣光. [游戏 ...
- Effective.Java第23-33条(泛型相关)
23. 类结构层次优于标签类 有时你会碰到一个类,它的实例有一个或多个风格,并且包含一个tag属性表示实例的风格.例如,如下面的类表示一个圆或者矩形: public class Figure {/* ...
- java游戏2333整合包,[1.12.2][CatServer]基础插件简单MOD冰与火传说整合服务端
包含内容: 插件列表: 彩色标语-MOTDColor1.7.X 传送君TPAPro v1.2 登陆AuthMe-5.6.0-SNAPSHOT 服务器优化LaggRemover-2.0.5 更多声音pl ...
- java 泛型 父子,Java泛型-mb601cf8a78cc07的博客-51CTO博客
Java泛型 泛型类 即把不确定的数据元素类型用一个泛型占位符表示@Data public class Person { private T name; private T address; }Per ...
- Java学习总结:15
Object类 Object类的基本定义 Object类是所有类的父类,也就是说任何一个类在定义时如果没有明确地继承一个父类,那它就是Object类的子类. 取得对象信息:toString() 在Ob ...
- java web服务与配置,Java Web远端服务器的配置与部署
写在前面 首先说使用云服务器和我们使用自己的PC电脑其实是差不多的,只是我们在服务器上运行的一些软件都是提供网络服务的.在本文中,我们首先了解一些远端服务器的控制工具,然后了解一下服务器的整体配置,最 ...
- java反序列化 exp_java反序列化-ysoserial-调试分析总结篇(4)
1.前言 这篇文章继续分析commoncollections4利用链,这篇文章是对cc2的改造,和cc3一样,cc3是对cc1的改造,cc4则是对cc2的改造,里面chained的invoke变成了i ...
最新文章
- #地形剖面图_高中地理——每日讲1题(地形剖面图)
- Lunar New Year and Food Ordering
- php输出远程文件边读边下载,php file_get_contents读取远程文件并输出
- 简单分布式系统构建知识
- 数据库工具DBeaver
- 金蝶K3运行时错误-2147467238(8000401a)Automation错误
- OpenWrt搭建KMS服务(Vlmcsd)
- c语言解线性方程组矩阵形势,c语言解线性方程组.docx
- 一文读懂机器学习分类全流程
- 无人车系统(七):Udacity ‘s无人驾驶仿真环境(社区介绍)
- python3刷火车票_Python3实现抢火车票功能(上)
- mysql mtq_MySQL调优学习笔记(一、MySQL基础)
- MStar平台编译环境安装
- EVERYTHING本地搜索工具
- Python学习中的Pond是什么
- 【产品经理三节课】第1章 产品经理的学习与成长
- 3499元起!乐视超级电视引爆量子点电视普及大潮
- 阿里云IoT2018年度十佳合作伙伴20强入围企业公布
- 2345去除主页锁定的方法
- 【2014,上半年是一个转变】