打印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 ...
随机推荐
- 【usaco】patrol
很长时间都没想出来的简单题,看了题解才写出来,还是naive 原题: FJ有个农场,其中有n块土地,由m条边连起来.FJ的养牛场在土地1,在土地n有个新开张的雪糕店.Bessie经常偷偷溜到雪糕店,当 ...
- RecyclerView使用完全解析
http://blog.csdn.net/a396901990/article/details/40153759 Android RecyclerView 使用完全解析 体验艺术般的控件 通过这个控件 ...
- python部分模块的安装
scrapy http://www.cnblogs.com/txw1958/archive/2012/07/12/scrapy_installation_introduce.html pyHook - ...
- div+css关于overflow 动态滚动效果
http://www.ablanxue.com/prone_2613_1.html 关于overflow:hidden不起作用的说明
- AR、美颜、机器人:计算机视觉库几乎无所不在
最近日本推出的反美颜应用Primo可能让感到不胜惶恐.其实,这样反人类的应用,你也能写出,不过必须了解的一些技术,就是计算机视觉.目前,计算机视觉库包括FastCV.OpenCV.JavaCV等. 相 ...
- 方正S4101g笔记本电脑搜不到无线网络
方正S4101g这款笔记本的无线网卡有问题.不能识别高版本的WIFI信号.有时候链接上之后,就再也找不到无线网络信号了.有时候根本就找不到. 解决方法:把无线路由的发送模式和频率设置到最低.重启路 ...
- SSH三大框架合辑的搭建步骤
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 【转】用 PHP 内置函数 file_put_contents 写入文件
PHP 内置函数 file_put_contents 用于写入文件. file_put_contents 函数最简单的写法,可以只用两个参数,一个是文件路径,一个是要写入的内容,语法如下: file_ ...
- Google将数十亿行代码储存在单一的源码库
过去16年,Google使用一个中心化源码控制系统去管理一个日益庞大的单一共享源码库.它的代码库包含了约10亿个文件(有重复文件和分支)和 3500万行注解,86TB数据,900万唯一源文件中含有大约 ...
- ntko office 5.0.1.0注册码
如何手工卸载和安装NTKOOFFICE文档控件?(NTKOOFFICE文档控件) 1.何时进行手工卸载和安装; 一般情况下应该让客户端自动控件,这样当服务器控件版本更新时,客户端可以获得自动升级方面的 ...