期望得分:100+100+100=300

实际得分:100+100+70=270

 

T1位运算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。

最后一个非零数-1

#include<cstdio>
using namespace std;
int num[7],bit[7],ans[7];
int main()
{
    freopen("bit.in","r",stdin);
    freopen("bit.out","w",stdout);
    int n,len=0;
    scanf("%d",&n);
    bit[0]=1; for(int i=1;i<7;i++) bit[i]=bit[i-1]*10;
    while(n) num[len++]=n%10,n/=10;
    bool ok=false;
    for(int i=0;i<len;i++) 
    {
        ans[i]=num[i];
        if(!ok && ans[i]) ans[i]--,ok=true;
    }
    int out=0;
    for(int i=0;i<len;i++) out+=ans[i]*bit[i];
    printf("%d",out);
    return 0;
}
View Code

相关文章: