EMC的一道数字编程编程题
2015-11-22 16:47
417 查看
版权归EMC所有。
解题思路:此道题目的解题要点有两点。第一,利用进位的思想,如果当前位没有办法通过修改当前位数字为3或5使得修改后的数字比原来的数字大,则需要进位。第二,如果当前位修改后的数字比它原来的数字大,则要将当前位以后的数字全部置为3。详细情况,参看代码注释。
解题思路:此道题目的解题要点有两点。第一,利用进位的思想,如果当前位没有办法通过修改当前位数字为3或5使得修改后的数字比原来的数字大,则需要进位。第二,如果当前位修改后的数字比它原来的数字大,则要将当前位以后的数字全部置为3。详细情况,参看代码注释。
import java.util.Scanner; public class Copy_2_of_Main { public static void main(String[] args) { @SuppressWarnings("resource") Scanner scan = new Scanner(System.in); while (true){ String a = scan.next(); char[] c = a.toCharArray(); cal(c); } } public static String cal(char[] c){ int carry = 1; //carry初始化数值为1,可视为个位被加了一个1。 for (int i = c.length -1; i >= 0; i--){ int n = c[i] - '0' + carry; if (n >=0 && n < 3){ // [0, 3) 本位数字设置为3,变大了,那么后面的位都置为3。 c[i] = '3'; carry = 0; //不需要再向前进位 reSetBack(c, i + 1); }else if (n == 3){ //无论之前carry为1还是0,都不再需要进位。 c[i] = '3'; carry = 0; } else if (n > 3 && n < 5){ // (3, 5) 本位数字设置为5,变大了,那么后面的位都置为3。 c[i] = '5'; carry = 0; //不再需要向前进位 reSetBack(c, i + 1); }else if (n == 5){ //与n==3时的情况,是一样的 c[i] = '5'; carry = 0; }else if (n > 5){ // (5, 9] 本位数字设置为3,变小了,那么后面的位都置为3。并且,需要向前进位。 c[i] = '3'; carry = 1; reSetBack(c, i + 1); } } String res = String.valueOf(c); if (carry == 1){ //如果还有进位,则将res*10+3。 res += "3"; } System.out.println(res); return res; } public static void reSetBack(char[] c, int l){ //设置之后的位全部为3 if (l >= c.length) return; for (int i = l; i < c.length; i++){ c[i] = '3'; } } }
相关文章推荐
- qt 窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透
- java--I/O流总结
- c++ vector(向量)使用方法详解(顺序访问vector的多种方式)
- C# 结构与类的区别
- Python制作简单的网页爬虫
- 【C语言】【笔试题】模拟实现strncat
- secureCRT sftp 使用
- php中一些函数的用法
- 在ubuntu下安装python imagine library
- 【C++基础学习】成员对象与对象数组
- QT5与之前版本间问题整理
- java 每日习题(九)从数据库中取数据
- QTime中currentTime()的使用方法
- Qt中利用定时器QTimer准实时显示当前日期和时间
- JAVA语法基础之标识符和关键字
- java学习日记-------------------------------------贪吃蛇
- JAVA语法基础之标识符和关键字
- java中解析xml的四种方法
- Java中的clone方法 -- 原型模式
- php隐藏图片地址一例