栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++快读思路及代码+整活慢读1.0

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++快读思路及代码+整活慢读1.0

众所周知,c++自带读入函数cin的速度非常慢,尤其是读入数字时。

而c自带读入函数scanf相对来说就要快一点,但在读取多个大数时还是会显得慢。

这个时候就需要我们手写读入函数了(简称快读)


快读思路:运用较快的读取字符函数getchar将数字读入再进行处理还原。

代码:

long long in(){
	char c = getchar();
	long long x = 0, f = 1;
	for (; c < '0' || c > '9'; c = getchar())
		if (c == '-') f = -1;
	for (; c >= '0' && c <= '9'; c = getchar())
		x = (x << 1) + (x << 3) + (c ^ 48);
	return x * f;
}

int x=in();long long y=in();

long long in(long long &x){
	char c = getchar();
	int f = 1;
	for (; c < '0' || c > '9'; c = getchar())
		if (c == '-') f = -1;
	for (; c >= '0' && c <= '9'; c = getchar())
		x = (x << 1) + (x << 3) + (c ^ 48);
	x*=f;
}

int x;in(x);long long y;in(y);

一般的OI竞赛中,这种快读就够用了,还有更加高深的读入(如fread)我就不一一赘述了(因为我也不会)


正经内容说完了,接下来就是大家期待的整活内容啦。

  1. 首先,scanf的读入速度比getchar慢,这是毋庸置疑的。
  2. 四则运算比位运算慢,这也是毋庸置疑的。
  3. vector数组常数大,比普通数组访问慢,同样是毋庸置疑的。 
  4. 快速幂做较小乘方运算时甚至没有pow函数快,一样毋庸置疑。
  5. long long类型数据所占内存较int更大,其速度更慢,还是毋庸置疑的。

那么结合以上5点,我推出了慢读1.0

代码:

#include
#define ll long long
using namespace std;
ll _pow(ll a,ll k)
{
    ll res=1;
    while(k)
    {
        if(k%2)res*=a;
        k/=2;
        a*=a;
    }
    return res;
}
ll in()
{
    vectora;
    ll k=0;
    char c;scanf("%c",&c);
    ll x=0;
    while(c<'0'||c>'9')scanf("%c",&c);
    while(c>='0'&&c<='9'){a.push_back(c-'0');scanf("%c",&c);k++;}
    ll tot=k;
    while(k--)
        x+=_pow(10,tot-k)*a[k];
    return x/10;
}
int main()
{
    ll n;
    n=in();
    printf("%lld",n);
    return 0;
}

求过。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983427.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号