这次相对于慢读1.5来说其实改动不大,只是换了个容器而已。
1.5:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll _pow(ll a,ll k)
{
ll res=1;
while(!(k==0))
{
if(k%2)res=res*a;
k=k/2;
a=a*a;
}
return res;
}
ll in()
{
vector<ll>a;
ll k=0;
char c;c=cin.get();
ll x=0,f=1;
while(c<'0'||c>'9')
{
if(c=='-')f=-1;
c=cin.get();
}
while(c>='0'&&c<='9'){a.push_back(c-'0');c=cin.get();k++;}
ll tot=k;
while(k--)
x+=_pow(10,tot-k)*a[k];
return x/10*f;
}
int main()
{
ll n;
n=in();
printf("%lld",n);
return 0;
}
那么我来解释一下为什么把vector换成了queue。
来看一下读入的顺序,以123为例:
显然读入顺序是1,2,3。
再来看处理的顺序会发现也是1,2,3。
符合队列的要求——First In First Out(FIFO)
那我还用什么vector啊。
上代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll _pow(ll a,ll k)
{
ll res=1;
while(!(k==0))
{
if(k%2)res=res*a;
k=k/2;
a=a*a;
}
return res;
}
ll in()
{
queue<ll>a;
char c;c=cin.get();
ll x=0,f=1;
while(c<'0'||c>'9')
{
if(c=='-')f=-1;
c=cin.get();
}
while(c>='0'&&c<='9'){a.push(c-'0');c=cin.get();}
while(!a.empty())
{
x+=_pow(10,a.size())*a.front();
a.pop();
}
return x/10*f;
}
int main()
{
ll n;
n=in();
printf("%lld",n);
return 0;
}