题解 P6745 【Number】

囧仙

2020-08-08 19:56:04

Solution

## 题目大意 给定 $k,x$ ,输出 $10^k+x$ 。 ## 题解 观察到 $x\in[0,10^{18})$ ,在 $\text{long long}$ 范围内,所以我们可以按照 $k$ 的大小进行分类讨论。 - $k\le 18$ 时,用 $\text{long long}$ 可以存下答案。直接暴力求解即可。 - $k>18$ 时,$10^{k}$ 最后 $18$ 位都是 $0$ 。于是不会有进位之类的问题困扰。我们将 $x$ 倒过来填进去就行了。 ## 参考代码 ```cpp #include<bits/stdc++.h> #define up(l,r,i) for(int i=l;i<=r;i++) #define dn(l,r,i) for(int i=l;i>=r;i--) using namespace std; typedef long long LL; const int INF =2147483647; LL qread(){ LL w=1,c,ret; while((c=getchar())> '9'||c< '0') w=(c=='-'?-1:1); ret=c-'0'; while((c=getchar())>='0'&&c<='9') ret=ret*10+c-'0'; return ret*w; } char ans[600]; LL k,x; LL pwr(LL a,LL b){LL ret=1; up(1,b,i) ret*=a; return ret;} int main(){ k=qread(),x=qread(); if(k<=18){ printf("%lld\n",pwr(10,k)+x); } else { up(1,k+1,i) ans[i]='0'; ans[1]='1'; up(1,18,i) if(x) ans[k-i+2]=x%10+'0',x/=10; printf("%s\n",ans+1); } return 0; } ```