1 条题解

  • 0
    @ 2025-8-24 22:28:08

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 追梦之鲸
    哼~

    搬运于2025-08-24 22:28:08,当前版本为作者最后更新于2021-01-31 11:46:04,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    本蒟蒻的第008008篇题解。

    经典回顾P7258

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

    言归正传,我们可以先把10010^0~10910^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;
    }
    

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

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

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

    其实很简单,那就是c%w[k]/w[k-1],因为c%w[k]求的是cckk位及以下的数,在除以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 
    }
    

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

    • 1

    信息

    ID
    5823
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者