1123 舍入(测试点2,6,7,8)


solution

  • 注意负号的取舍以及进位
    • 只有舍入后非零的负数才会输出负号
    • 可能有多位进位,用高精度加法
  • 测试点2,6:整数
bash 复制代码
1 3
1 8
bash 复制代码
8.000
  • 测试点7:多次进位
bash 复制代码
1 3
3 9.9999
bash 复制代码
10.000
  • 测试点8:舍入后全0的负值
bash 复制代码
1 3
3 -0.0000000001
bash 复制代码
0.000
cpp 复制代码
#include<iostream>
#include<string>
using namespace std;
int main(){
	int n, d, com, cnt, minus, all, carry, point, p, need, have, i, t;
	string s;
	cin >> n >> d;
	while(n--){
		cnt = minus = all = carry = point = p = need = have = 0;
		cin >> com >> s;
		if(s[0] == '-'){
			minus = 1;
			s.erase(0, 1);
		}
		while(p < s.size() && s[p] != '.') p++;//找到小数点位置
		if(p < s.size() && com != 2){//处理进位
			if(com == 1 && p + d + 1 < s.size() && s[p + d + 1] > '4') need = 1;
			else if(com == 3 && p + d + 1 < s.size() && s[p + d + 1] > '4'){
				if(s[p + d + 1] > '5') need = 1;
				else{
					for(int i = p + d + 2; i < s.size() && !have; i++){
						if(s[i] >= '1' && s[i] <= '9') have = 1;
					}
					if(have || (s[p + d] - '0') % 2 == 1) need = 1;
				}
			}
			carry = need;
			for(int i = p + d; i >= 0 && need; i--){//高精度加法
				if(s[i] == '.') continue;
				t = s[i] - '0' + carry;
				s[i] = t % 10 + '0';
				carry = t / 10;
			}
			if(carry) s = "1" + s;//最高位仍有进位时,数字前加一
		}
		for(int i = 0; i < s.size() && i < p + d && !all; i++){//是否全0
			if(s[i] >= '1' && s[i] <= '9') all = 1;
		}
		if(all && minus) cout << "-";//不是全0且有负号,才输出负号
		for(i = 0; i < s.size() && i <= p + d; i++){
			cout << s[i];
		}
		if(p == s.size()) {//整数时,添加小数点(D是正整数,所以一定需要输出小数点)
			cout << ".";
			p--;
		}
		while(i - p <= d + carry){//不足D位则补0
			cout << "0";
			i++;
		}
		cout << endl;
	}
	return 0;
}
相关推荐
programhelp_22 分钟前
特斯拉 MLE 超详细面经 + 避坑
数据结构·人工智能·算法·面试·职场和发展
越甲八千43 分钟前
深入了解迭代器erase()之后的失效逻辑
算法
Kurbaneli43 分钟前
C语言过时了吗?2025年仍不可替代
c语言·开发语言
躺柒44 分钟前
读人工智能全球格局:未来趋势与中国位势06人类的未来(下)
大数据·人工智能·算法·ai·智能
_风华ts1 小时前
C++ 函数封装与绑定
c++·函数指针·函数封装
ttkwzyttk1 小时前
Linux下GNU Autotools工具基础教程
c·linux应用
ShineWinsu1 小时前
对于C++中stack和queue的详细介绍
开发语言·数据结构·c++·面试·stl·queue·stack
L_Aria1 小时前
6421. 【NOIP2019模拟11.11】匹配
c++·算法·动态规划
骇城迷影2 小时前
代码随想录:哈希表篇
算法·哈希算法·散列表
智者知已应修善业2 小时前
【PAT乙级真题解惑1012数字分类】2025-3-29
c语言·c++·经验分享·笔记·算法