题目描述
众所周知,杜神非常喜欢出大模拟,也非常喜欢设置一些细节坑人。例如,在某次大赛中,他出了一道这样的题
(以下省略3000字)
计算出答案a后,你应该将a除以1000,再保留到小数点后两位输出,四舍五入。
保证a是非负整数,而且不超过64位有符号整数的表示范围。
输入
多组数据,每组数据1行,包含整数a。
输出
每组数据输出一行,表示杜神要你输出的答案。
--正文
把数看作字符串来处理
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int main(int argc,char** argv) { char num[2000]; int i,j; while (scanf("%s",num) != EOF) { int length = strlen(num); if (length <= 3){ if (length <= 2){ if (length == 2) { if (num[1] >= ‘5‘){ if (num[0] == ‘9‘){ printf("0.10\n"); } else { printf("0.0%c\n",num[0]+1); } } else { printf("0.0%c\n",num[0]); } } else { if (num[0] >= ‘5‘){ printf("0.01\n"); } else { printf("0.00\n"); } } } else { if (num[length-1] >= ‘5‘){ int now = length-2; while ( now >= 0 && num[now] == ‘9‘){ num[now] = ‘0‘; now --; } if (now == -1) { printf("1.%c%c\n",num[0],num[1]); } else { num[now]++; printf("0.%c%c\n",num[0],num[1]); } } else { printf("0.%c%c\n",num[0],num[1]); } } } else { if (num[length-1] >= ‘5‘) { int now = length-2; while ( now >= 0 && num[now] == ‘9‘){ num[now] = ‘0‘; now --; } if (now == -1) { int i; printf("1"); for (i=0;i<=length-2;i++){ printf("%c",num[i]); if (i == length-4) { printf("."); } } } else { num[now] ++; int i; for (i=0;i<=length-2;i++){ printf("%c",num[i]); if (i == length-4) { printf("."); } } } printf("\n"); } else { int i; for (i=0;i<=length-2;i++){ printf("%c",num[i]); if (i == length-4) { printf("."); } } printf("\n"); } } } return 0; }
时间: 2024-10-08 10:27:47