题解 P6745 【Number】
囧仙
2020-08-08 19:56:04
## 题目大意
给定 $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;
}
```