题目链接:http://codeforces.com/problemset/problem/219/B
题意:给出商品价格p,希望通过降价使得价格p的后面的数位有尽可能多的9,并且要保证降价范围不超过d
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
typedef long long ll;
#define M 100005
ll p,d;
int main()
{cin>>p>>d;ll pre=p,las=0; //las枚举后面9的个数,pre是通过降价将尾数变为las之后,前面非9位数的值ll pow=10,ans=p;//pow记录pre的权值while(pre>0){ll x=pre%10;//x是pre的当前位pre=pre/10;las=las*10+9;if(x!=9) //当前位非9,那么我们要将前面pre的值--来保证是降价的过程,{if(pre>=1)//如果除了las,前面pre的值非0{pre--; //降价ll tmp=pre*pow+las;//降价后的值ll cha=p-tmp; //所降价格if(cha<=d) ans=tmp;else break;}}else{ //当前位为9,不用继续降价,只要合成当前枚举的价格即可ll tmp=pre*pow+las;ll cha=p-tmp;if(cha<=d) ans=tmp;else break;}pow=pow*10;}cout<<ans<<endl;return 0;
}