第一次 AtCoder 体验,不是很好。
A Recursive Function
大水题。只要会递归就会做。
点击查看代码
#include <cstdio>
#include <iostream>
#define ll long long
using namespace std;
inline ll re(){;
register ll f=1ll,k=0;
register char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-1;
ch=getchar();
}
while(isdigit(ch)){
k=(k<<1ll)+(k<<3ll)+(ch^48ll);
ch=getchar();
}
return 1ll*k*f;
}
void wr(ll x){
if(x<0){
x=~x+1;
putchar('-');
}
if(x>9) wr(x/10ll);
putchar(x%10ll^48ll);
}
ll n;
ll f(int k){
if(k==0) return 1;
return k*f(k-1);
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
n=re();
wr(f(n));
return 0;
}
Broken Rounding
考场上英语读题 + 码力导致花了好长时间。
我们每次对 \(x\) 的最后一位 \(num\) 进行分析,首先先对 \(x/10^{i-1}\),对于每一个 \(num=x\%10\),如果 \(i\) 是小于 \(5\) 的,那么就在处理后的 \(x\) 基础上减去 \(num\),否则就在处理后的 \(x\) 基础上加上 \(10-num\)。这样的操作后,我们又在 \(x\) 的基础上重新乘上 \(10^{i-1}\) 即可。直到 \(i=k\) 时,算法结束,输出答案即可。
点击查看代码
#include <cmath>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
ll x,k;
inline ll re(){;
ll f=1ll,k=0;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-1;
ch=getchar();
}
while(isdigit(ch)){
k=(k<<1ll)+(k<<3ll)+(ch^48ll);
ch=getchar();
}
return 1ll*k*f;
}
void wr(ll x){
if(x<0){
x=~x+1;
putchar('-');
}
if(x>9) wr(x/10ll);
putchar(x%10ll^48ll);
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
x=re(),k=re();
ll ten=1;
for(int i=1;i<=k;++i){
x/=ten;
ll num=x%10;
if(num<5)
x-=num;
else
x+=(10-num);
x*=ten;
ten*=10;
}
wr(x);
return 0;
}