大数问题:打印从1到最大的n位数
//打印从1到最大的n位数:大数问题,用字符串表示数字来避免溢出
bool increment(char* number){
bool isOverFlow = false;
int nTakeOver = 0;
size_t strLength = strlen(number);
for (size_t i = strLength - 1; i >= 0; --i){
int nSum = number[i] - '0' + nTakeOver;
if (i == strLength - 1)
nSum++;
if (nSum >= 10){
if (i == 0){
isOverFlow = true;
break;
}
nSum -= 10;
nTakeOver = 1;
number[i] = nSum + '0';
}
else{
number[i] = nSum + '0';
break;
}
}
return isOverFlow;
}
void printNumber(char* number){
size_t strLength = strlen(number);
int i = 0;
while (number[i] == '0') {i++;}
for (; i < strLength; ++i)
printf("%c", number[i]);
printf("\t");
}
void print1ToMaxOfNDigits(int n){
if (n <= 0)
return;
char* number = new char[n + 1];
memset(number, '0', n);
number[n] = '\0';
while (!increment(number))
printNumber(number);
delete []number;
return;
}
//方法二:全排列方法,递归实现
void print1ToMaxDigitsRecursively(char* number, int length, int index){
if (index == length - 1)
printNumber(number);
else{
for (int i = 0; i < 10; ++i){
number[index + 1] = '0' + i;
print1ToMaxDigitsRecursively(number, length, index+1);
}
}
}
void print1ToMaxOfNDigits2(int n){
if (n <= 0)
return;
char* number = new char[n + 1];
for (int i = 0; i < 10; ++i){
number[0] = i + '0';
print1ToMaxDigitsRecursively(number, n, 0);
}
return;
}
大数问题:打印从1到最大的n位数的更多相关文章
- 剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数 Offer 17 题目解析: 暴力解法 package com.walegarrett.offer; /** * @Author WaleGarret ...
- 力扣 - 剑指 Offer 17. 打印从1到最大的n位数
题目 剑指 Offer 17. 打印从1到最大的n位数 思路1 如果有n位,那么最大值就是\(10^n-1\),即如果n是2,那么最大就到输出到99 考虑到大数情况,所以使用字符数组 还要把字符数组转 ...
- 剑指Offer:打印从1到最大的n位数
题目:输入数值n,按顺序打印从1到最大的n位数,例如输入n=3,则从1,2,3,一直打印到999 陷阱:若使用循环遍历 1- 999...9 并依次输出,当位数n过大时,无论将其存入int或long或 ...
- 【剑指offer】面试题 17. 打印从 1 到最大的 n 位数
面试题 17. 打印从 1 到最大的 n 位数 题目描述 题目:输入数字 n,按顺序打印出从 1 最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数即 999. 解答过 ...
- 大数相加和大数相乘以及打印从1到最大的n位数
string add(string a, string b){ int nlength; int diff; if (a.size() > b.size()){ nlength = a.size ...
- 打印从1到最大的n位数(考虑大数问题)
void Print1ToMaxOfNDigits(int n) { if(n <= 0) { return; } int * number = new int[n]; for(int i = ...
- 剑指offer 打印从1到最大的n位数
题目描述: 输入数字n,按顺序打印出从1到最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数999. 分析:注意不能直接输入最大的n位十进制数,因为可能属于大数,这个数无法用int或 ...
- 打印从1到最大的n位数
//和剑指offer程序基本一致,不过print和进位两部分合并在一个程序中 //如果把其分拆,进行适当的整理,代码会更加整洁 void PrintToMaxOfDigitsN(int n) { ) ...
- 大数运算:HDU-1042-N!(附N!位数的计算)
解题心得: 这里使用了10000进制.很明显,因为是n!所以单个最大的数是10000*10000,使用万进制. 可以借鉴高精度的加法,单个乘了之后在进位. 很坑的一点,0!=1,数学不好WA了三次,尴 ...
随机推荐
- MyBatis+PageHelper实现分页
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7256105.html 前面讲到Spring+SpringMVC+MyBatis深入学习及搭建(十七)--Sp ...
- rabbitMQ教程(二)一篇文章看懂rabbitMQ
一.rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. 学过websocket的来理解rabbitMQ应该是 ...
- 会话跟踪技术之——cookie
1.cookieForm <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- MySql 事务与锁
事务介绍 首先,什么是事务?事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子),不可分割,要么都执行,要么回滚(rollback)都不执行. MySQL 事务主要用于处理操作量大, ...
- ES2017中的修饰器Decorator
前面的话 修饰器(Decorator)是一个函数,用来修改类的行为.本文将详细介绍ES2017中的修饰器Decorator 概述 ES2017 引入了这项功能,目前 Babel 转码器已经支持Deco ...
- 使用Mapper专用的MyBatis Generator插件
使用Maven执行MBG 这里有一个完整的例子,Mybatis-Spring,下面讲解的内容出自这个例子. 使用Maven插件的一个好处是可以将Maven中的属性使用${property}形式在gen ...
- 度度熊与邪恶大魔王 DP | 完全背包
Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...
- B趣味求和
编写一个程序,求Sn=a+aa+aaa+--+aa-aaa(有n个a)的值,其中a是一个数字. Input 输入数据含有不多于50组的数据,每组数据由两个正整数(0<a, n < 10)组 ...
- js复习---string
对js的string的方法复习: 1.charCodeAt() 返回一个整数,代表指定位置字符串的unicode编码. strObj.charCodeAt(index) index 是处理字符的从零 ...
- 从用eclipse还是idea所想到的
最近一直在用idea做开发,刚开始用起来还是不熟,毕竟上次用idea还是研三在某知名互联网实习的时候,在学校和上家公司都用的是eclipse,然后就想,为什么有的公司用eclipse,有的公司用ide ...