举个栗子:输入 3 ; 打印1,2,3......999

这里要注意一个坑,不可以直接算出最大的数,然后从1开始打印 。因为当n足够大时,n位数必定会超出int范围和long范围

所以我们需要用字符串来解题 , 模拟加法运算,循环打印。

思路:

1.先将n位数最大的一项+1用字符串str标记

2.StringBuilder对象ans用来做加法运算以及打印操作

3.boolean类型flag 用来标记是否需要进位

4.每次都从ans最后一位开始+1,需要进位时,将此时i的位置值为0,紧接着判断它的前一位置的字符是否+1需要进位,如果加一不需要进位,直接+1,break即可,否则继续循环下去。对于99这类数+1后,字符已经遍历完,flag为true,需要给ans 0号位置插入1 。

5.当ans和str的值相等时,循环结束

代码实现:

    public static void main(String[] args) {
getMums(3);
}
//flag用来判断需不需要进位
static boolean flag;
private static void getMums(int n) {
//str 用来保存最大的数,作为结束循环的条件
StringBuilder str = new StringBuilder();
str.append(1);
while (n != 0) {
str.append(0);
n--;
} StringBuilder ans = new StringBuilder();
ans.append(1);
//ans字符串累加操作
while (!ans.toString().equals(str.toString())) {
System.out.println(ans);
//加一的判断
for (int i = ans.length() - 1; i >= 0; i--) {
//涉及进位
if (ans.charAt(i) == '9') {
ans.replace(i, i + 1, "0");
flag = true;
continue;
} else {
//找到累加的位置
ans.replace(i, i + 1, Integer.toString((ans.charAt(i) - '0' + 1)));
flag = false;
break;
}
}
//当数字类似于 99 999 时,头部插入1.
if (flag == true) {
ans.insert(0, 1);
}
//结束条件
if (str.toString().equals(ans.toString())) {
return;
}
}
}

结果:

1
2
3
...
998
999

java输入一个整数N,打印1~n位数的更多相关文章

  1. scala基础题--函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔

    函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔 import scala.io.StdIn object work02 { def main(args: Array[St ...

  2. Java 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)

    import java.util.*; /* * 输入一个整数,计算它各位上数字的和. * (注意:是任意位的整数) */ public class Sum02 { public static voi ...

  3. java输入一个字符串,打印出该字符串中字符的所有排列,随机打乱排序

    import java.util.ArrayList;import java.util.Collections;import java.util.List; public class Test7{   ...

  4. JAVA输入一个整数,求出其所有质因数

    首先得求出能整除A的数,再判断I是否是质数!!! import java.util.*; public class aa { public static void main(String[] args ...

  5. Java基础周测题,输入一个整数,输出所有能整除该整数的结果:

    需求说明: 输入一个整数,输出所有能整除该整数的结果: 实现代码: package demo; import java.util.Scanner; public class test1 { publi ...

  6. 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数

    题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 分析:首先最先想到的是遍历从1到n的每 ...

  7. 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j

    //整数数组的定义,然后输入一个整数x,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j: //如果X在该阵列,返回位置的阵列中的数. 资源: #include<iostr ...

  8. python 输入一个整数,判断其是否既是3的倍数,又是5的倍数

    v = int(input('请输入一个整数:')) if v % 3 == 0 and v % 5 ==0: print(v,'即是3的倍数又是5的倍数') else: print('不是3或5的倍 ...

  9. 用java求一个整数各位数字之和

    /* * 用java求一个整数各位数字之和 */ public class Test02 { public static void main(String[] args) { System.out.p ...

随机推荐

  1. asp.net相关的一些代码

    显示目录下的内容 using System.IO; DirectoryInfo di = new DirectoryInfo(Server.MapPath("Views/video" ...

  2. JavaSE---多线程---Callable、Future

    1.概述 1.1 JDK1.5后,Java提供了Callable接口,该接口提供一个call方法作为线程执行体,该call方法可以  有返回值.声明抛出异常: 因此,我们可以直接将Callable接口 ...

  3. 【记录】Java NIO实现网络模块遇到的BUG

    1.背景 通过JavaNio实现一个简单的网络模块,有点像Netty的线程模型,一个线程(AcceptThread)建立新连接,把新连接绑定到某个SelectorThread,SelectorThre ...

  4. 每天一个linux命令:nl(12)

    nl nl命令读取 file 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出.在输出中,nl命令根据您在命令行中指定的标志来计算左边的行.输入文本必须写在逻辑页中.每个逻辑页 ...

  5. UNP学习 多播

    一.概述 单播地址标识单个接口,广播地址标识子网上的所有接口,多播地址标识一组接口. 单播和广播是编址方案的两个极端,多播的目的就在于提供一种折衷的方案. 二.多播地址 我们必须区分IPv4多播地址和 ...

  6. 【Flutter学习】页面跳转之SliverAppBar,CustomScrollView,NestedScrollView的使用

    一,flutter SliverAppbar 控件介绍 SliverAppBar “应用栏” 相当于升级版的 appbar 于 AppBar 位置的固定的应用最上面的; 而 SliverAppBar ...

  7. 2019牛客多校第五场 B - generator 1 矩阵快速幂+十倍增+二进制倍增优化

    B - generator 1 题意 给你\(x_{0}.x_{1}.a.b.b.mod\),根据\(x_{i} = a*x_{i-1} + b*x_{i-2}\)求出\(x_{n}\) 思路 一般看 ...

  8. The First Scrum Meeting!

    第六周会议 情况简述 会议概要:明确需求,确定目标 参与人员:詹晓宇  谢赛金  熊紫仁  徐翠萍  周娟  孙尚煜 讨论时间:2019-10-24 会议地点:六区研讨性教室 具体内容 根据之前做的P ...

  9. 開啟windows 7 ,10 的熱點功能(無線熱點)

    開啟windows 7 ,10 的熱點功能: 1.首先要確定你的電腦無線芯片有無熱點功能  # netsh wlan show drivers    Hosted network supported ...

  10. eclipse导入工程时出现大红色感叹号(转)

    转载文章:http://blog.csdn.net/xiaotaibai2008/article/details/6365334 因为也遇到了同样的问题,所以google了以下,希望对于我这个小菜鸟有 ...