输入:非负整数n。
输出:如输入3,则输出1~999。
基本的方法涉及到大数,通过用字符串模拟加法运算。
知识点:判断溢出
逆序打印字符串
基本的代码如下
#include <stdio.h> #include <stdlib.h> #include <memory.h> size_t inc_num(char* num_str, size_t len) { int i = 0; int carrier = 0; num_str[0] += 1; do { if (num_str[i] > 9) { carrier = 1; num_str[i] -= 10; } else { carrier = 0; } if (++i > len) { break; } num_str[i] += carrier; } while (carrier); return i; } void put_num(const char* num_str, size_t len) { // ignore high zero while (len && !num_str[len - 1]) { --len; } while (len) { putchar(num_str[--len] + '0'); } putchar(' '); } void print_num(size_t len) { if (len <= 0) { return; } char* num_str = (char*)malloc(len); if (!num_str) { return; } memset(num_str, 0, len); size_t curr_len = 0; while ((curr_len = inc_num(num_str, len)) <= len) { put_num(num_str, len); } free(num_str); } int main(int argc, char *argv[]) { if (argc != 2) { printf("usage ./instance num "); return -1; } int num = atoi(argv[1]); print_num(num); return 0; }