打印1到最大的n位数
打印1到最大的n位数----java实现
- 题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如,输入3,则打印出1,2,3,.....,一直到最大的3位数即999。
分析:
1、这是一个典型的大数加法问题,无论是int还是long long类型多无法表示。所以在解决大数问题时,通常是使用字符串或者数组实现其功能(由于个人比较钟爱数组,所以下面代码是使用数组实现的)。
2、在大数的加法中,我们需要注意的问题是进位问题。
3、在该题中还需要判断是否为最大的n位整数。这里需要一个小技巧,我们只需判断最高位(第n位)是否要进位,如果需进位,则已经为最大数。

- package com.edu;
- public class PrintMaxOfNDigits {
- public boolean Increment(int[] number){ // 这个方法是用来实现对数加1操作
- boolean isOverflow = false;
- int nTakeOver=0;
- for(int i=number.length-1;i>=0;i--){
- int nSum = number[i]+nTakeOver;
- if(i==number.length-1)
- nSum++;
- if(nSum>=10){
- if(i==0)
- isOverflow=true;
- else{
- nTakeOver=1;
- nSum=nSum-10;
- number[i]=nSum;
- }
- }
- else{
- number[i]=nSum;
- break;
- }
- }
- return isOverflow;
- }
- public void PrintNumber(int[] number){ //该方法是负责打印一个正类,千万不要尝试将数组变成一个整数
- boolean isBeginning=true;
- for(int i=0;i<number.length;i++){
- if(isBeginning&&number[i]!=0)
- isBeginning=false;
- if(!isBeginning){
- System.out.print(number[i]);
- }
- }
- }
- public void Test(int n){ //打印从1到最大的n位整数
- if(n<=0)
- System.out.println("输入出错,请重新输入!");
- int[] number = new int[n];
- while(!Increment(number)){
- PrintNumber(number);
- //System.out.println();
- }
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- new PrintMaxOfNDigits().Test(1);
- }
- }

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

- //第二中方法实现,全排序实现
- public void PrintMaxOfNdigits(int[] number,int length,int index){
- if(index ==length-1){
- PrintNumber(number);
- return;
- }
- for(int i=0;i<10;i++){
- number[index+1]=i;
- PrintMaxOfNdigits(number, length, index+1);
- }
- }
- public void Test1(int n){
- if(n<=0)
- return;
- int[] number = new int[n];
- for(int i=0;i<10;i++){
- number[0]=i;
- PrintMaxOfNdigits(number, n, 0);
- }
- }

类似的题目还有:

- 描述
- 编程精确计算2的N次方。(N是介于100和1000之间的整数)。
- 输入:正整数N (100≤N≤1000)
- 输出:2的N次方
- 样例输入:200
样例输出:1606938044258990275541962092341162602522202993782792835301376

下面给出c语言的代码:

- #include<stdio.h>
- #include<math.h>
- void main(){
- int i,j,n,temp,k=0,sub=0;
- int a[1000];
- a[0]=1;
- scanf("%d",&n);
- for(i=1;i<=n;i++)
- {
- for(j=0;j<=sub;j++) a[j]=a[j]*2;
- if(a[sub]/10==1)
- {
- sub++;
- a[sub]=0;
- }
- for(j=0;j<=sub;j++)
- {
- temp=(a[j]+k)%10;
- k=a[j]/10;
- a[j]=temp;
- }
- }
- for(j=sub;j>=0;j--)
- printf("%d",a[j]);
- }

- 描述:求两个非负整数(1000位以内)的和。
- 输入:两个非负整数(1000位以内),以空格分隔。
- 输出:两个非负整数的和。
- 样例
输入:111111111111 222222222222- 样例输出:333333333333
下面个出的代码是用使用字符串实现的:

- #include<stdio.h>
- #include<string.h>
- char* r(char a[])
- {
- int i,j;
- char t;
- i=strlen(a)-1;
- j=0;
- while(j<i)
- {
- t=a[j];
- a[j]=a[i];
- a[i]=t;
- --i;++j;
- }
- return a;
- }
- int main()
- {
- char a[1000],c[1000];
- int b[1000]={0};
- int i,t,m,n,mx,mi,k=0;
- scanf("%s %s",a,c);
- r(a);
- r(c);
- t=strlen(a);
- m=strlen(c);
- mx=t>m?t:m;
- mi=t<m?t:m;
- for(i=0;i<mi;i++)
- {
- n=a[i]+c[i]-'0'-'0';
- b[i]=(n+k)%10;
- k=(n+k)/10;
- }
- for(i=mi;i<mx;++i)
- {
- if(mx==t)
- n=a[i]-'0';
- if(mx==m)
- n=c[i]-'0';
- b[i]=(n+k)%10;
- k=(n+k)/10;
- }
- if(k==1)
- {
- b[mx]=1;
- ++mx;
- }
- for(i=mx-1;i>=0;i--)
- printf("%d",b[i]);
- printf("\n");
- return 0;
- }

打印1到最大的n位数的更多相关文章
- 剑指Offer面试题:11.打印1到最大的n位数
一.题目:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二.不同的解法 2.1 不假思索的解法 最容易想到的办 ...
- 面试题12:打印1到最大的n位数
// 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...
- 《剑指offer》面试题12:打印1到最大的n位数
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
- 【面试题012】打印1到最大的n位数
[面试题012]打印1到最大的n位数 大数问题 字符串中的每一个字符都是‘0’到‘9’之间的某一个字符,用来表示数字中的一位,因为数字最大是n位的,因此我们需要一个长度为n+1的字符串,字符串的最后 ...
- 1515:打印1到最大的N位数 @jobdu
题目1515:打印1到最大的N位数 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:625 解决:323 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一 ...
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题.由于n是任意大的数组,如果n太大的话n位数就超过了l ...
- 打印1到最大的n位数-Java
在练习剑指offer的时候,第12题打印1到最大的n位数的时候,想找个java版的,但大家要么用BigInteger做,要么给出其他的方法.我觉得要给就给最好的方法,下面是我自己参考C++代码写的ja ...
- 【Java】 剑指offer(16) 打印1到最大的n位数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印 ...
- 《剑指offer》第十七题(打印1到最大的n位数)
// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <ios ...
随机推荐
- HTML文件结构
转载(http://jingyan.baidu.com/article/75ab0bcbf04a75d6864db2fd.html) HTML文件结构 HTML文件均以<html>标记开始 ...
- vi基本操作
vi的基本操作 a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command m ...
- mysql SQL SERVER 的算法
Filesort Probes http://dev.mysql.com/doc/refman/5.7/en/dba-dtrace-ref-filesort.html http://dev.mysql ...
- Tensorflow ——神经网络
Training Data Eval: Num examples: 55000 Num correct: 52015 Precision @ 1: 0.9457Validation Data Eval ...
- Heap Only Tuples (HOT)
Introduction ------------ The Heap Only Tuple (HOT) feature eliminates redundant index entries and a ...
- DbContextConfiguration 属性
属性 AutoDetectChangesEnabled 获取或设置一个值,该值指示是否通过 DbContext 和相关类的方法自动调用 DetectChanges 方法. 默认值为 true. Ens ...
- 反射矩阵(reflection matrix)推导
设平面为(nx,ny,nz,d),则以此平面为镜面的列主序反射矩阵如下: 推导如下: 一,平面的表示: 如图所示,过点p,法向量为n的平面,可表示为: np+d=0 其中d为平面到原点的有向距离.如果 ...
- 微软发布了ASP.NET WebHooks预览版
微软 近期发布了ASP.NET WebHooks的预览版 ,这是一个可用于创建及使用Webhook功能的库.WebHooks支持MVC 5及WebApi 2. Webhook是一种通过HTTP实现用户 ...
- 转载:使用sklearn做单机特征工程
目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...
- mongoDB 下载/安装/客户端笔记
1.下载: https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-3.0.3.zip 2.安装 1.解压mongodb-win32-x86 64- ...