这题C++暂时过不了

看到题解区大佬们的分类,我不禁留下了蒟蒻的眼泪。

题目翻译

给你一个数,让你按照数字的大小将这个数字缩写。缩写内容可以用$K$,用$M$或者直接输出,但是要符合实际。

分析

首先主要可以分为三大类:

  1. 直接输出数字的
  2. 数字末尾带$K$的
  3. 数字末尾带$M$的

第一类比较简单,直接输出数字就好了,没有什么难度。

第二类较麻烦,需要将原来的数除以一个$1000$后四舍五入输出,四舍五入可以用round()函数。但是这里有一个特判,样例中提到了(没见过这么友善的样例),就是当一个数为$999999$时,$1M$与之更为接近。当然还有其它的数,所以我们只需要判断当前的数和$1M$是不是更为接近即可。

第三类比较简单,只需要将数字除以$1000000$之后同样四舍五入输出,后面加个$M$就好了。

代码

#include <iostream>
#include <cmath>				//round()函数所在库
using namespace std;
int t;
int n;
void solve(int t){
	if(t<1000){
		cout<<t<<endl;			//小于1000就直接输出
		return;
	} else if(t<1000000){		//介于1000 ~ 999999之间
		if(1000000 - t < t - (t / 1000 * 1000) )
		//这里拆分一下。首先1000000-t代表的是t到一百万的差距
		//t - (t/1000*1000)就是将t化为带K的数后与原来的数的差距
		cout<<"1M\n";			//满足特判条件,输出
		else{
			double ans=t/1000.0;
			cout<<round(ans)<<"K\n";
		}
		return;
	} else{
		double ans=t/1000000.0;
		cout<<round(ans)<<"M\n";
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>t;
		solve(t);
	}
}

发表评论

邮箱地址不会被公开。