位运算1
(bit)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK拥有一个十进制的数N。它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥有的价值。例如数字123拥有6的价值,数字999拥有27的价值。
假设数字N的价值是K,LYK想找到一个价值是K-1的数字,当然这个答案实在太多了,LYK想使得这个价值为K-1的数字尽可能大。
输入格式(bit.in)
一个数N。
输出格式(bit.out)
一个数表示答案。你需要输出一个非负整数,且这个数不包含前导0。
输入样例1
199
输出样例1
198
输入样例2
1000
输出样例2
0
对于20%的数据n<=10
对于40%的数据n<=100
对于60%的数据n<=1000
对于100%的数据1<=n<=100000。
#include<iostream> #include<cstdio> using namespace std; #define maxn 10 int n,bit[maxn],len; int main(){ freopen("bit.in","r",stdin);freopen("bit.out","w",stdout); scanf("%d",&n); while(n){ bit[++len]=n%10; n/=10; } int now=1; while(bit[now]==0)now++; bit[now]--; while(bit[len]==0&&len>=1)len--; if(len==0)printf("0"); else for(int j=len;j>=1;j--)printf("%d",bit[j]); fclose(stdin);fclose(stdout); return 0; }