codeforce_219B Special Offer! Super Price 999 Bourles!
一道考虑细节多一点的题目,WA了好多次。没什么算法,就是做完这道题人都不好了,才有了 关于数据测试 这点感想,不过还好有了教训就要长记性,我相信我会进步的。毕竟努力是有收获的。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef __int64 LL;
using namespace std;
int getdig(LL n){
if(n==0)return 1;
n=n>0?n:-n;
int digit=1;
while(n>=10){
n/=10;
++digit;
}
return digit;
}
LL mpow10(int x){
if(x<0)return 1;
LL base=10,ans=1;
while(x!=0){
if(x%2)ans*=base;
base*=base;
x>>=1;
}
return ans;
}
LL p ,lp,d;
int main()
{
while(scanf("%I64d%I64d",&p,&d)==2){
lp=p-d;
int dig1=getdig(p),dig2=getdig(lp),i,j;
if(dig2<dig1){
int sign=1;
for(i=0;i<dig1-1;i++)
if((p/mpow10(i))%10!=9)sign=0;
if(sign)printf("%I64d",p);
else{
if(p/mpow10(dig1-1)-1!=0)printf("%I64d",p/mpow10(dig1-1)-1);
for(i=1;i<dig1;i++)printf("9");
}
}
else {
for(i=dig1-1;i>=0;i--)
if(p/mpow10(i)!=lp/mpow10(i))break;
int sign=1;
for(j=i-1;j>=0;j--)
if((p/mpow10(j))%10!=9)sign=0;
if(sign||i<0)printf("%I64d",p);
else {
printf("%I64d",p/mpow10(i)-1);
for(j=i-1;j>=0;j--)
printf("9");
}
}
putchar(10);
}
return 0;
}
还没有评论,来说两句吧...