剑指offer_12_打印1到最大的n位数
剑指offer_12_打印1到最大的n位数
题目:输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。
显然,这里面有一个小陷阱,当我们输入的n很大时,就算我们用长整形(long long)都会溢出。long int 最大值为2^64 -1,约二十位。也就是说当输入的n大于20是就会产生溢出。我们就需要考虑到这是一个大数问题。
最常用的方法是用字符串或数组表示大数。
用字符串表示数字的时候,最直观的方法就是字符串里每个字符都是 '0' 到 '9' 之间的某一个字符,用来表示数字中的一位。因为数字最大的时候n位的,因此我们需要一个长度为n+1的字符串(字符串中最后一个是结束符号 '\0' )。当实际数字不够n位时,在字符串的前半部分补0。
void Print1ToNDigits(int n)
{if(n<0) return;char *number = new char[n+1];memset(number, '0', n);number[n] = '\0';while(!Increment(number)){PrintNumber(number);//printf("%s \n",number);}delete []number;
}
在字符串模拟加一
bool Increment(char* number)
{//溢出判定bool isOverFlow = false;//进位int nTakeOver = 0;//长度int nLength = strlen(number);for(int i = nLength - 1; i >= 0; i--){//第n位的值等于第n位字母的ascii减去 0 的ascii 再加第n+1位的进位int nSum = number[i] - '0' + nTakeOver;if(i == nLength - 1)++nSum;if(nSum >= 10){if(i == 0)isOverFlow = true;else{nSum -= 10;nTakeOver = 1;number[i] = '0' + nSum;}}else{number[i] = '0' + nSum;break;}}return isOverFlow;
}
打印字符串表示的数字
void PrintNumber(char* number)
{bool isBegining0 = true;int nLength = strlen(number);for(int i = 0; i< nLength; ++i){if(isBegining0 && number[i] != '0')isBegining0 = false;if(!isBegining0){printf("%c",number[i]);}}printf("\t");
}
全部代码:
//字符串模拟数字
#include<stdio.h>
#include<stdlib.h>
#include <algorithm>
using namespace std;#define type charbool Increment(char*);
void PrintNumber(char*);
void Print1ToNDigits(int);void main(){//输出到文件//freopen("output.txt","w",stdout);Print1ToNDigits(5);
}void Print1ToNDigits(int n)
{if(n<0) return;char *number = new char[n+1];memset(number, '0', n);number[n] = '\0';while(!Increment(number)){PrintNumber(number);//printf("%s \n",number);}delete []number;
}//字符串模拟加法
bool Increment(char* number)
{//溢出判定bool isOverFlow = false;//进位int nTakeOver = 0;//长度int nLength = strlen(number);for(int i = nLength - 1; i >= 0; i--){//第n位的值等于第n位字母的ascii减去 0 的ascii 再加第n+1位的进位int nSum = number[i] - '0' + nTakeOver;if(i == nLength - 1)++nSum;if(nSum >= 10){if(i == 0)isOverFlow = true;else{nSum -= 10;nTakeOver = 1;number[i] = '0' + nSum;}}else{number[i] = '0' + nSum;break;}}return isOverFlow;
}
//打印字符串表示的数字
void PrintNumber(char* number)
{bool isBegining0 = true;int nLength = strlen(number);for(int i = 0; i< nLength; ++i){if(isBegining0 && number[i] != '0')isBegining0 = false;if(!isBegining0){printf("%c",number[i]);}}printf("\t");
}
剑指offer_12_打印1到最大的n位数相关推荐
- 剑指offer- 顺时针打印矩阵 精品算法
剑指offer 刷了这么多题但是这一道,这个算法和其他人的算法都不一样 ,必须吹爆, 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 ...
- 剑指offer--打印1到最大的n位数
记录来自<剑指offer>上的算法题. 题目如下: 输入数字n,按顺序打印出从1到最大的n位十进制数.比如输入3,则打印出1,2,3一直到最大的3位数即999. 第一种解法是比较容易想到, ...
- 剑指Offer_12_数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路 当exponent为0时,返回1,当exponent大于0,那么循环 ...
- 剑指-顺时针打印矩阵
注意:在每次进行循环进行读写时,一定要判断left.right.top.bom的关系 vector<int> printMatrix(vector<vector<int> ...
- 剑指Offer_12_矩阵中的路径(参考问题:马踏棋盘)
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵 ...
- 不支持给定路径的格式_剑指offer_12_矩阵中的路径
//面试题12.矩阵中的路径 //题目:请设计一个函数,用来判断在一个矩阵中,是否存在一条包含某字符串所有字符的路径. //路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如 ...
- 【剑指offer】顺时针打印矩阵
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...
- 剑指offer:顺时针打印矩阵
题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 ...
- 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...
最新文章
- mysql单列索引和多列索引_mysql索引类型 normal, unique, full text
- 怎么看python环境变量配置是否好了验证图片_简述验证Anaconda是否安装成功的两种方式和Anaconda环境变量配置过程...
- ant design pro取消登录_JeecgBoot实战按需加载 Ant-Design-Vue和Icon
- ABAP的数据字典DDIC和Hybris Commerce的类型系统Type system
- checkbox ajax 不选中的值,php – 无法通过ajax传递checkbox的值
- 导出excel/xml
- 来讨论一下这些常见的 Redis 面试题
- 全面解析Java的垃圾回收机制(转)
- 调用远程接口上传文件
- 字节跳动最新开源!java条件运算符判断三个数大小
- Eigen中的map
- 写给人类的机器学习 一、为什么机器学习重要
- OneNote的同步问题
- 租房需要注意些什么?
- 电脑黑屏只有鼠标箭头怎么修复 电脑开机黑屏的修复办法
- 【超分辨率】Zoom to Learn, Learn to Zoom
- java生成指定位数的随机英文字符串
- git报错error: index uses extension, fatal: index file corrupt
- tinyint(1)与tinyint(3),int(1)与int(3),tiny(1)与int(1)区别
- 初中计算机科学生情况,初中计算机科学与技术的现代化运用探究