主要考虑大数问题。n一大很容易超过正数能表示的范围,因此需要用字符数组模拟。
先增加1,再打印。如下
- <span style="font-size: 18px;">#include <stdio.h>
- #include <stdlib.h>
- //溢出返回1,否则0
- int add(char* number)
- {
- int overflow = 0,i,current_value;
- int nLength = strlen(number),jinwei = 0;
- for(i = nLength - 1; i >= 0; i --){
- current_value = number[i] - '0' + jinwei; //每一位加上进位
- if(i == nLength - 1) //最低位还要加上1
- current_value ++;
- if(current_value >= 10){ //其实是在等于10的时候,需要进位
- if(i == 0)
- overflow = 1; //最高位需要进位时说明已经到了最大值
- else{
- current_value -= 10; //不是最高位就要进位操作,首先将当前位减去10,然后设置进位标志待下一次使用
- jinwei = 1;
- number[i] = '0' + current_value;
- }
- }
- else{ //不需要进位就把current_value赋值给number位就行
- number[i] = '0' + current_value;
- break;
- }
- }
- return overflow;
- }
- //打印出这个数字,并忽略开头的0
- void print_a_number(char* number)
- {
- int begin = 0,i;
- for(i = 0; i < strlen(number); ++ i){
- if(!begin && number[i] != '0')
- begin = 1;
- if(begin)
- printf("%c", number[i]);
- }
- printf("\t");
- }
- void print_all(int n)
- {
- charchar *number = (char*)malloc((n+1) * sizeof(char)); //最后一位要放 \0
- if(n <= 0) return;
- memset(number, '0', n);
- number[n] = '\0';
- while(!add(number)){
- print_a_number(number);
- }
- free(number);
- }
- void main()
- {
- print_all(2);
- getch();
- }</span>
<span style="font-size: 18px;">#include <stdio.h>
#include <stdlib.h>
//溢出返回1,否则0
int add(char* number)
{
int overflow = 0,i,current_value;
int nLength = strlen(number),jinwei = 0;
for(i = nLength - 1; i >= 0; i --){
current_value = number[i] - '0' + jinwei; //每一位加上进位
if(i == nLength - 1) //最低位还要加上1
current_value ++;
if(current_value >= 10){ //其实是在等于10的时候,需要进位
if(i == 0)
overflow = 1; //最高位需要进位时说明已经到了最大值
else{
current_value -= 10; //不是最高位就要进位操作,首先将当前位减去10,然后设置进位标志待下一次使用
jinwei = 1;
number[i] = '0' + current_value;
}
}
else{ //不需要进位就把current_value赋值给number位就行
number[i] = '0' + current_value;
break;
}
}
return overflow;
}
//打印出这个数字,并忽略开头的0
void print_a_number(char* number)
{
int begin = 0,i;
for(i = 0; i < strlen(number); ++ i){
if(!begin && number[i] != '0')
begin = 1;
if(begin)
printf("%c", number[i]);
}
printf("\t");
}
void print_all(int n)
{
char *number = (char*)malloc((n+1) * sizeof(char)); //最后一位要放 \0
if(n <= 0) return;
memset(number, '0', n);
number[n] = '\0';
while(!add(number)){
print_a_number(number);
}
free(number);
}
void main()
{
print_all(2);
getch();
}</span>
参考剑指offer