算法笔记(3)—— 快速 I/O 算法:快速输入算法、快速输出算法

简介: 算法笔记(3)—— 快速 I/O 算法:快速输入算法、快速输出算法

快速输入算法

【内置函数速度比较】

std::cin < scanf < getchar

getchar 是最快的,其速度大约为 cin 的 10 倍,然后是 scanf,最后是 cin,原因也很简单,


cin 需要判断输入数据的类型,智能地输入数据,其中,智能识别需要消耗大量时间;(较慢)


scanf 虽不需要智能识别,可它有一个格式化的过程,要识别格式化字符串,需要消耗部分时间;(一般)


getchar 没有什么特殊的过程,直接接收一个字符,几乎不消耗时间;(较快)

因此我们的快速输入算法就是基于 getchar 实现的

【快速输入整数】

函数所需头文件

【C】stdio.h、ctype.h

【C++】iostream

#define int long long //精度提高方法


inline void getint(int &n)//快速输入整数函数
//n:引用的变量
{
  bool b=false;//负号判断变量
  char c=getchar();
  while(isspace(c))c=getchar();//空格字符直接跳过
  if(c==45)b=true,c=getchar();//添加负号标记
  if(isdigit(c))n=0;//初始化为 0
  while(true)
  {
    if(isdigit(c))//判断是否为数字字符
    {
      n*=10;
      n+=c-48;
      c=getchar();
    }
    else break;
  }
  n=b?-n:n;//改变符号
}

【快速输入浮点数】

函数所需头文件

【C】stdio.h、ctype.h

【C++】iostream

#define float double //精度提高方法
inline void getfloat(float &n)//快速输入浮点数函数(兼容整数)
//n:引用的变量
{
  float f=1.;//小数
  bool b=false,p=false;//负号判断变量、小数点判断变量
  char c=getchar();
  while(isspace(c))c=getchar();//空格字符直接跳过
  if(c==45)b=true,c=getchar();//添加负号标记
  if(isdigit(c))n=0.;//初始化为 0
  while(true)
  {
    if(!p&&c==46)p=true,c=getchar();//小数点存在
    if(isdigit(c))//判断是否为数字字符
    {
      (!p)?n*=10:f*=10;
      n+=float(c-48)/f;
      c=getchar();
    }
    else break;
  }
  n=b?-n:n;//改变符号
}

快速输出算法

【内置函数速度比较】

std::cout < printf < putchar

putchar 是最快的,其速度大约为 cout 的 10 倍,然后是 printf,最后是 cout,原因也很简单,


cout 需要判断输出数据的类型,智能地输出数据,其中,智能识别需要消耗大量时间;(较慢)


printf 虽不需要智能识别,可它有一个格式化的过程,要识别格式化字符串,需要消耗部分时间;(一般)


putchar 没有什么特殊的过程,直接输出一个字符,几乎不消耗时间;(较快)

因此我们的快速输出算法就是基于 putchar 实现的

【快速输出整数】

函数所需头文件

【C】stdio.h

【C++】iostream

#define int long long //精度提高方法
inline void putint(int &n)//快速输出整数函数
//n:引用的变量
{
  int num=0;
  if(n<0)putchar(45);//输出负号
  n=n<0?-n:n;//取正数
  while(n)//翻转数字 n
  {
    num*=10;
    num+=n%10;
    n/=10;
  }
  while(num)//输出
  {
    putchar(48+num%10);
    num/=10;
  }
}

【快速输出浮点数】

函数所需头文件

【C】stdio.h、math.h

【C++】iostream、cmath

#define float double //精度提高方法

inline void putfloat(float &n,int p)//快速输出浮点数函数
//n:引用的变量 p:保留小数点的位数
{
  long long num=0,key;
  if(n<0)putchar(45);//输出负号
  n=n<0?-n:n;//取正数
  key=n*pow(10,p);//小数部分化为整数
  n=0;//归为 0,便于后续使用 
  while(key)//翻转数字 n
  {
    num*=10;
    num+=key%10;
    key/=10;
    n++;
  }
  while(num)//输出
  {
    if(p+key++==n)putchar(46);
    putchar(48+num%10);
    num/=10;
  }
}


目录
相关文章
|
3月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
82 1
|
3月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
60 0
|
3月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
59 0
|
3月前
|
算法
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
36 0
|
3月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
122 0
|
3月前
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
99 1
|
3月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
90 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
24 1
|
3月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
27 0
|
3月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
38 0