题解 P7258

· · 题解

本蒟蒻的第008篇题解。

经典回顾P7258

那么好的一道打表题你们给弄成了啥!

言归正传,我们可以先把10^0~10^9都打表,然后就有了下面一段代码

#include<bits/stdc++.h>
using namespace std;
int s=1;
int main()
{
    cout<<"w[10]={1,";
    while(1)
    {
        s*=10;
        cout<<s<<",";
        if(s==1000000000) break;
    }
    cout<<"}";
    return 0;
}

好了,那么再来说说判断四舍五入

判断第k位需不需要四舍五入,那就要看k-1位是否<=4,是则舍,否则入

那么怎么求k-1位上的数呢

其实很简单,那就是c%w[k]/w[k-1],因为c%w[k]求的是ck位及以下的数,在除以w[k-1]就求出了第k-1位上的数

最后还有一个问题:怎么输出?

其实就是c/w[k]*w[k]

要是进一的话就是(c/w[k]+1)*w[k]

最后提醒大家:

一定要注意括号!

code:

#include<bits/stdc++.h>
int sum,c,k,w[10]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
int main()
{
    scanf("%d%d",&c,&k);
    if(k==0)return printf("%d",c) & 0;//如果k=0,那么就不需四舍五入了,直接输出就行
    k=w[k];//注意这里可能和讲的不同,请见谅 
    sum=c%k/(k/10);
    if(sum<5)return printf("%d",(c/k*k)) & 0;
    return printf("%d",((c/k+1)*k)) & 0;
        //看到这有些同学可能会疑惑:return … & 0;是什么鬼?,其实它是输出并return 0 
}

最后管理大大求过&&来玩啊