打印1到最大的n位数----java实现

  1. 题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如,输入3,则打印出123,.....,一直到最大的3位数即999

分析:

1、这是一个典型的大数加法问题,无论是int还是long long类型多无法表示。所以在解决大数问题时,通常是使用字符串或者数组实现其功能(由于个人比较钟爱数组,所以下面代码是使用数组实现的)。

2、在大数的加法中,我们需要注意的问题是进位问题。

3、在该题中还需要判断是否为最大的n位整数。这里需要一个小技巧,我们只需判断最高位(第n位)是否要进位,如果需进位,则已经为最大数。

  1. package com.edu;
  2.  
  3. public class PrintMaxOfNDigits {
  4.  
  5. public boolean Increment(int[] number){ // 这个方法是用来实现对数加1操作
  6. boolean isOverflow = false;
  7. int nTakeOver=0;
  8. for(int i=number.length-1;i>=0;i--){
  9. int nSum = number[i]+nTakeOver;
  10. if(i==number.length-1)
  11. nSum++;
  12. if(nSum>=10){
  13. if(i==0)
  14. isOverflow=true;
  15. else{
  16. nTakeOver=1;
  17. nSum=nSum-10;
  18. number[i]=nSum;
  19. }
  20. }
  21. else{
  22. number[i]=nSum;
  23. break;
  24. }
  25. }
  26. return isOverflow;
  27. }
  28.  
  29. public void PrintNumber(int[] number){ //该方法是负责打印一个正类,千万不要尝试将数组变成一个整数
  30. boolean isBeginning=true;
  31. for(int i=0;i<number.length;i++){
  32. if(isBeginning&&number[i]!=0)
  33. isBeginning=false;
  34. if(!isBeginning){
  35. System.out.print(number[i]);
  36. }
  37. }
  38. }
  39.  
  40. public void Test(int n){ //打印从1到最大的n位整数
  41. if(n<=0)
  42. System.out.println("输入出错,请重新输入!");
  43. int[] number = new int[n];
  44.  
  45. while(!Increment(number)){
  46. PrintNumber(number);
  47. //System.out.println();
  48. }
  49. }
  50.  
  51. public static void main(String[] args) {
  52. // TODO Auto-generated method stub
  53. new PrintMaxOfNDigits().Test(1);
  54. }
  55.  
  56. }

第二种解法:全排列的思想

  1. //第二中方法实现,全排序实现
  2. public void PrintMaxOfNdigits(int[] number,int length,int index){
  3. if(index ==length-1){
  4. PrintNumber(number);
  5. return;
  6. }
  7. for(int i=0;i<10;i++){
  8. number[index+1]=i;
  9. PrintMaxOfNdigits(number, length, index+1);
  10. }
  11. }
  12.  
  13. public void Test1(int n){
  14. if(n<=0)
  15. return;
  16. int[] number = new int[n];
  17. for(int i=0;i<10;i++){
  18. number[0]=i;
  19. PrintMaxOfNdigits(number, n, 0);
  20. }
  21. }

类似的题目还有:

  1. 描述
  2.  
  3. 编程精确计算2N次方。(N是介于1001000之间的整数)。
  4. 输入:正整数N (100N1000)
  5. 输出:2N次方
  6. 样例输入:200
    样例输出:1606938044258990275541962092341162602522202993782792835301376

下面给出c语言的代码:

  1. #include<stdio.h>
  2. #include<math.h>
  3.  
  4. void main(){
  5. int i,j,n,temp,k=0,sub=0;
  6. int a[1000];
  7. a[0]=1;
  8. scanf("%d",&n);
  9. for(i=1;i<=n;i++)
  10. {
  11. for(j=0;j<=sub;j++) a[j]=a[j]*2;
  12. if(a[sub]/10==1)
  13. {
  14. sub++;
  15. a[sub]=0;
  16. }
  17. for(j=0;j<=sub;j++)
  18. {
  19. temp=(a[j]+k)%10;
  20. k=a[j]/10;
  21. a[j]=temp;
  22. }
  23. }
  24. for(j=sub;j>=0;j--)
  25. printf("%d",a[j]);
  26.  
  27. }
  1. 描述:求两个非负整数(1000位以内)的和。
  2. 输入:两个非负整数(1000位以内),以空格分隔。
  3. 输出:两个非负整数的和。
  4. 样例
    输入:111111111111 222222222222
  5. 样例输出:333333333333

下面个出的代码是用使用字符串实现的:

  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. char* r(char a[])
  5. {
  6. int i,j;
  7. char t;
  8. i=strlen(a)-1;
  9. j=0;
  10. while(j<i)
  11. {
  12. t=a[j];
  13. a[j]=a[i];
  14. a[i]=t;
  15. --i;++j;
  16. }
  17. return a;
  18. }
  19. int main()
  20. {
  21. char a[1000],c[1000];
  22. int b[1000]={0};
  23. int i,t,m,n,mx,mi,k=0;
  24. scanf("%s %s",a,c);
  25. r(a);
  26. r(c);
  27. t=strlen(a);
  28. m=strlen(c);
  29. mx=t>m?t:m;
  30. mi=t<m?t:m;
  31. for(i=0;i<mi;i++)
  32. {
  33. n=a[i]+c[i]-'0'-'0';
  34. b[i]=(n+k)%10;
  35. k=(n+k)/10;
  36. }
  37. for(i=mi;i<mx;++i)
  38. {
  39. if(mx==t)
  40. n=a[i]-'0';
  41. if(mx==m)
  42. n=c[i]-'0';
  43. b[i]=(n+k)%10;
  44. k=(n+k)/10;
  45. }
  46. if(k==1)
  47. {
  48. b[mx]=1;
  49. ++mx;
  50. }
  51. for(i=mx-1;i>=0;i--)
  52. printf("%d",b[i]);
  53. printf("\n");
  54. return 0;
  55. }

打印1到最大的n位数的更多相关文章

  1. 剑指Offer面试题:11.打印1到最大的n位数

    一.题目:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二.不同的解法 2.1 不假思索的解法 最容易想到的办 ...

  2. 面试题12:打印1到最大的n位数

    // 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...

  3. 《剑指offer》面试题12:打印1到最大的n位数

    面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...

  4. 【面试题012】打印1到最大的n位数

    [面试题012]打印1到最大的n位数  大数问题 字符串中的每一个字符都是‘0’到‘9’之间的某一个字符,用来表示数字中的一位,因为数字最大是n位的,因此我们需要一个长度为n+1的字符串,字符串的最后 ...

  5. 1515:打印1到最大的N位数 @jobdu

    题目1515:打印1到最大的N位数 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:625 解决:323 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一 ...

  6. 剑指offer编程题Java实现——面试题12打印1到最大的n位数

    题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题.由于n是任意大的数组,如果n太大的话n位数就超过了l ...

  7. 打印1到最大的n位数-Java

    在练习剑指offer的时候,第12题打印1到最大的n位数的时候,想找个java版的,但大家要么用BigInteger做,要么给出其他的方法.我觉得要给就给最好的方法,下面是我自己参考C++代码写的ja ...

  8. 【Java】 剑指offer(16) 打印1到最大的n位数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印 ...

  9. 《剑指offer》第十七题(打印1到最大的n位数)

    // 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <ios ...

随机推荐

  1. HTML文件结构

    转载(http://jingyan.baidu.com/article/75ab0bcbf04a75d6864db2fd.html) HTML文件结构 HTML文件均以<html>标记开始 ...

  2. vi基本操作

    vi的基本操作 a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command m ...

  3. mysql SQL SERVER 的算法

    Filesort Probes http://dev.mysql.com/doc/refman/5.7/en/dba-dtrace-ref-filesort.html http://dev.mysql ...

  4. Tensorflow ——神经网络

    Training Data Eval: Num examples: 55000 Num correct: 52015 Precision @ 1: 0.9457Validation Data Eval ...

  5. Heap Only Tuples (HOT)

    Introduction ------------ The Heap Only Tuple (HOT) feature eliminates redundant index entries and a ...

  6. DbContextConfiguration 属性

    属性 AutoDetectChangesEnabled 获取或设置一个值,该值指示是否通过 DbContext 和相关类的方法自动调用 DetectChanges 方法. 默认值为 true. Ens ...

  7. 反射矩阵(reflection matrix)推导

    设平面为(nx,ny,nz,d),则以此平面为镜面的列主序反射矩阵如下: 推导如下: 一,平面的表示: 如图所示,过点p,法向量为n的平面,可表示为: np+d=0 其中d为平面到原点的有向距离.如果 ...

  8. 微软发布了ASP.NET WebHooks预览版

    微软 近期发布了ASP.NET WebHooks的预览版 ,这是一个可用于创建及使用Webhook功能的库.WebHooks支持MVC 5及WebApi 2. Webhook是一种通过HTTP实现用户 ...

  9. 转载:使用sklearn做单机特征工程

    目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...

  10. mongoDB 下载/安装/客户端笔记

    1.下载: https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-3.0.3.zip 2.安装 1.解压mongodb-win32-x86 64- ...