/*******************************************************************
Copyright(c) 2016, Tyrone Li
All rights reserved.
*******************************************************************/
// 作者:TyroneLi
//
/*
Q:
输入一个数字,按顺序打印出从1到n位的十进制数。
例如:
输入: 3
输出: 1,2,3,......,999
S:
1.题目没有明确输入的n表示的n位十进制最大的数,是否会是大数,
这里必须考虑大数问题,然后采用字符串的方法表示。
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
void printNumber(char*number)
{
bool isBegining = true;
int lengh = strlen(number);
for(int i = 0; i < lengh; ++i)
{
if(isBegining && number[i] != '0')
isBegining = false;
if(!isBegining)
{
std::cout << number[i];
}
if(isBegining && (i== lengh - 1))
std::cout << number[i];
}
std::cout << std::endl;
}
bool increment(char*number)
{
int nTakeOver = 0;
bool overflow = false;
int length = strlen(number);
for(int i = length - 1; i >=0; --i)
{
int sum = number[i] - '0' + nTakeOver;
if(i == length - 1)
++sum;
if(sum >= 10)
{
if(i == 0)
{
overflow = true;
}else{
sum -= 10;
nTakeOver = 1;
number[i] = sum + '0';
}
}else{
number[i] = sum + '0';
break;
}
}
return overflow;
}
void printToMaxDigits(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;
}
void test_printNumber()
{
std::cout << "test_printNumber func" << std::endl;
char*str_1 = "123456";
printNumber(str_1);
str_1 = "1234560000";
printNumber(str_1);
str_1 = "001234";
printNumber(str_1);
str_1 = "00001235000";
printNumber(str_1);
str_1 = "00000000000000001";
printNumber(str_1);
str_1 = "000000000000000010";
printNumber(str_1);
str_1 = "000000";
printNumber(str_1);
}
void test_printToMaxDigits()
{
std::cout << "test_printToMaxDigits func" << std::endl;
printToMaxDigits(-2);
printToMaxDigits(-1);
printToMaxDigits(0);
printToMaxDigits(1);
printToMaxDigits(2);
printToMaxDigits(3);
printToMaxDigits(3);
printToMaxDigits(4);
}
int main(int argc, char**argv)
{
test_printNumber();
test_printToMaxDigits();
return 0;
}
剑指offer-打印1到最大的n位数
最新推荐文章于 2022-04-14 09:35:08 发布