zoukankan      html  css  js  c++  java
  • 打印1到最大的n位数

    输入:非负整数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;
    }
  • 相关阅读:
    UML用例图总结
    项目管理心得:一个项目经理的个人体会、经验总结
    UML类图符号简介
    C++中栈和堆上建立对象的区别
    Win32 API
    Python
    remove extra kernel
    Create short cut
    Set Form Position
    Get folder
  • 原文地址:https://www.cnblogs.com/westfly/p/3293019.html
Copyright © 2011-2022 走看看