E:\arithmetic\PrintN
注意用int 或者long可能不能满足范围 所以要用char[], 注意字符串加1的进位问题及边界取值,打印时候前面有0不需打印出来。
#include <stdio.h>
#include <string.h>
void print1toMaxN(int n);
int add(char *str, int n);
void printStr(char *str, int n);
int main(){
print1toMaxN(3);
return 0;
}
void print1toMaxN(int n){
char *str = new char[n+1];
str[n] = '\0';
memset(str, '0', n);
int flag = 0;
while(!flag){
flag = add(str, n);
printStr(str, n);
}
/* test key code!
char str1[] = "099";
printf("%d\n", add(str1, 3));
printf(str1); */
delete []str;
}
int add(char *str, int n){
int flag = 0;
str[n-1]++;
if(str[n-1] > '9')
flag = 1;
int k = n-1;
while(flag && (k >= 0)){
str[k--] = '0';
if(k<0)//logic!!
{
flag = 1;
break;
}
str[k]++;
if(str[k] <= '9'){
flag = 0;
}
}
return flag;
}
void printStr(char *str, int n){
int i = 0;
int flag = 1;
for(i = 0 ; i<n ; i++){
if((str[i] == '0')&&(flag == 1))
continue;
flag = 0;
printf("%c", str[i]);
}
printf("\t");
}