您的位置:首页 > Web前端

《剑指offer》——打印1到最大的n位数

2015-12-22 20:16 435 查看
考虑大数问题,使用字符数组存储,

#include<iostream>
using namespace std;

bool inc(char *num)
{
//累加结束标志,初始为false
//只有当下标为0的位置上产生进位时,才能表明打印结束
bool flag = false;
int len = strlen(num);
int c = 0;//进位标志
for(int i = len - 1; i >= 0; i--)
{
num[i] = num[i] + c;
if(i == len - 1)//每次自加都在第len-1位上进行
++num[i];
if(num[i] > '9')//如果大于9,则进位
{
if(i == 0)//如果在第0位置上产生进位,设置flag为true
flag = true;
else//否则将当前位置上的值减10,并将进位标志置1
{
num[i] -= 10;
c = 1;
}
}
else
{
break;//如果不大于10,则结束循环,直接打印
}
}
return flag;
}

void show(char *num)
{
while(*num == '0')//跳过之前为0的字符,如跳过098前面的0
num++;
while(*num != '\0')//输出当前的字符
{
cout << *num;
num++;
}
}

void print(int n)
{
if(n <= 0)//错误的输入
cout << "error" << endl;
char *num = new char[n + 1];//新建一个长度为n+1的字符数组
memset(num, '0', n);//将数组初始化
num
= '\0';//设置结束位
while(!inc(num))
show(num);//循环打印每个数
}

int main() {
print(3);//输出1~999
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: