首先这一题会溢出,要考虑的大数问题。所以不能用简单的是int类型数来表示(32位无符号int 范围是0x00000000···0xFFFFFFFF),下面主要是非递归的实现代码,自己做了注释方便以后回顾。

#include "stdafx.h"
#include <iostream>
using namespace std;
//输入数字n,按照顺序打印出从1到最大的n位十进制数。
bool Increament(char *number);
void printNumber(char *number);
void prin1ToMaxOfDIgits(int n)
{
if(n<=)
return ;
char *number=new char[n+];//还包括'\0'
memset(number,'',n);
number[n]='\0'; while(!Increament(number)) //每次while一次就打印一个数,如果不溢出就打印
{
printNumber(number);
}
delete []number;
} bool Increament(char *number)
{
bool isOverflow = false;
int nTakeOver = ;
int nLength = strlen(number); for(int i = nLength - ; i >= ; i --)
{
int nSum = number[i]-''+ nTakeOver; //ntakeOver相当于进1位(这是其他位加1的核心之所在),注意这里减了'0',取其增加量,如nsum=0,1,2,3...,不减'0'(48),
//下面无法判断
if(i == nLength - )
nSum ++; //除了最低位是这样++,其他位都是按照进位的方式改变的,因为每次for循环会遍历
if(nSum >= ) //只是发生在进位的时候,当发生进位,当前位前一位就增加一个nTakeOver=1
{
if(i==) //如果是最左边的位,溢出(isOverflow= true)此时不能进位了
isOverflow= true;
else
{
nTakeOver=; //要进一位,也就是当前位的高一位会自动增加了一个1. 呼应nSum = number[i]-'0'+ nTakeOver,下次for循环i会-1,是当前位的高一位
nSum=nSum-; //当前位增量恢复到0
number[i] = nSum+''; //同时再转换到+'0'位置
}
}
else
{
number[i] = nSum+''; //增量+'0'的位置
break;
}
}
return isOverflow; //返回溢出判断
} void printNumber(char *number)
{
bool isBeginning0=true;
int nlength=strlen(number); for (int i=;i<nlength;i++)
{
if(isBeginning0 && number[i]!='') //从左往右,当碰到第一个非0字符的时候就从这里开始打印
isBeginning0=false;
if(!isBeginning0)
cout<<number[i]<<" ";
}
cout<<endl;
} void main()
{
prin1ToMaxOfDIgits();
}

打印出从1到最大的n位十进制数的更多相关文章

  1. 输入数字n,按顺序打印出从1到最大的n位十进制数

    题目:输入数字n,按顺序打印出从1到最大的n位十进制数.比如输入3,则打印出1,2,3一直到最大的999. 跳进面试官的陷阱 void PrintfToMaxNDigits(int n) { ; ; ...

  2. 打印1到最大的n位数

    打印1到最大的n位数----java实现 题目:输入数字n,按顺序打印出从1到最大的n位十进制数.比如,输入3,则打印出1,2,3,.....,一直到最大的3位数即999. 分析: 1.这是一个典型的 ...

  3. 剑指Offer:面试题12——打印1到最大的n位数(java实现)

    问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999. 思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可. public ...

  4. C++面试题一大波

    //打印1到最大的n位数. //题目:输入数字n.按顺序打印出从1到最大的n位十进制数.比方: //输入3.则打印出1.2.3一直到最大的3位数999. //[陷阱]:这个题目非常easy想到的办法就 ...

  5. 代码的完整性:打印1到最大的n位数

    输入数字n,按顺序打印出从1到最大的n位十进制数. 比如,输入3,则打印出1,2,3,.....,一直到最大的3位数即999. 全排列打印 public class Main { public sta ...

  6. (剑指Offer)面试题12:打印1到最大的n位数

    题目: 输入数字n,按顺序打印出从1到最大的n位十进制数. 比如输入3,打印1,2,3一直到最大的3位数即999. 思路: 1.不考虑n的范围,直接打印. void Print1ToMaxOfNDig ...

  7. 《剑指Offer》题十一~题二十

    十一.旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组{3, 4, 5, 1, 2}为{ ...

  8. 剑指offer 面试17题

    面试17题: 题目:打印从1到最大的n位数 题:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1.2.3一直到最大的3位数999. 解题思路:需要考虑大数问题,这是题目设置的陷 ...

  9. 【剑指offer】打印1到最大的n位数

    题目描写叙述: 输入数字n,按顺序打印出从1到最大的n位十进制数.比方输入3,则打印出1.2.3一直到最大的3位数即999. 分析描写叙述: 首先想到的是先计算出最大的n位数是多少,然后用一个循环从1 ...

随机推荐

  1. XCode6.1中的ios7.1适配

    在xcode6.1中新创建的项目,运行在我的ios7.1的ipod touch上时(与5s的一样的尺寸, Retina屏幕), 上下出现了黑边,由于没有下载7.1的模拟器,不知道模拟器上有无问题, 查 ...

  2. js验证码倒计时

    var wait=59; function time(){ if(wait >= 0){ $("#buttons").val("" + wait + &q ...

  3. Scroll文字滚动js

    function ScrollImgLeft(){ var speed=50, doc=document, scroll_begin = doc.getElementById("scroll ...

  4. 【链表】BZOJ 2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 382  Solved: 111[Submit][S ...

  5. PAT-乙级-1016. 部分A+B (15)

    1016. 部分A+B (15) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 正整数A的“DA(为1位整数)部 ...

  6. P​H​P​ ​5​.​3​连​接​s​q​l​ ​s​e​r​v​e​r​ ​2​0​0​8​ ​R​2

    我的机器为: xp sp3 sql server 2008 developer apache 2.2.2 php 5.3  从5.3开始,php就不再提供mssql.dll了,所以要php连接sql  ...

  7. poj 2065 SETI 高斯消元

    看题就知道要使用高斯消元求解! 代码如下: #include<iostream> #include<algorithm> #include<iomanip> #in ...

  8. MetadataType的使用

    MetadataType的使用,MVC的Model层数据验证指定要与数据模型类关联的元数据类 using System.ComponentModel.DataAnnotations; //指定要与数据 ...

  9. like 大数据字段 查询慢

    对于ntext的字段,作为查询条件的时候速度会很慢,比如以下语句: select * from T_KNOWLEDGE where CONTENTS like '%Oracle TimesTen In ...

  10. SaaS系列介绍之三: SaaS的特性与作用

    1 SaaS的特性 最早的SaaS服务之一当属在线电子邮箱,极大地降低了个人与企业使用电子邮件的门槛,进而改变了人与人.企业与企业之间的沟通方式.发展至今,SaaS服务的种类与产品已经非常丰富,面向个 ...