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;
}
相关推荐
wabs6669 分钟前
关于动态规划【力扣1143.最长公共子序列的思考】
算法·leetcode·动态规划
剑挑星河月30 分钟前
54.螺旋矩阵
java·算法·leetcode·矩阵
伏 念1 小时前
AI Coding 零基础实战教程
c语言·进程·预处理
你家人养牛1 小时前
OOC Relation Plugin:C 语言面向对象 开发的高效辅助工具
c语言·vscode
Robot_Nav1 小时前
MPPI 局部规划器实验设计讲解
人工智能·算法·mppi
想你依然心痛1 小时前
嵌入式C代码规范:MISRA-C 2012核心规则解读——类型安全与未定义行为深度剖析
c语言·安全·代码规范
mingo_敏1 小时前
Mean-Teacher 均值教师自训练框架详解
算法·均值算法
会周易的程序员2 小时前
microLog 后端开发指南
开发语言·c++·物联网·设计模式·日志·iot·aiot
星空露珠2 小时前
迷你世界UGc3.0脚本Wiki[剧情动画模块管理接口 Timeline]
开发语言·数据结构·算法·游戏·lua
笨笨没好名字2 小时前
Leetcode刷题python3版第一周(下)
linux·算法·leetcode