华为机试在线训练. 取近似值

题目描述

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

 

正常人解法:

1 #include<iostream>
2 using namespace std;
3 int main(){
4     float num;
5     cin>>num;
6     cout<<int(num+0.5)<<endl;
7     return 0;
8 }

憨憨的解法(me):

 1 #include <iostream>
 2 #include <math.h>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     float num;
 8     cin>>num;
 9     string str='0'+to_string(num);
10     bool carry=false;//是否进位
11     while(str.back()!='.'){
12         if(carry){
13             str.back()++;
14         }
15         if(str.back()>='5'){//5~9
16             str.pop_back();
17             carry=true;
18         }
19         else{//1~4
20             str.pop_back();
21             carry=false;
22         }
23     }
24     str.pop_back();//pop '.'
25     int i=str.size()-1;
26     while(carry){
27         str[i]++;
28         if(str[i]>'9'){
29             str[i]='0';
30             carry=true;
31         }
32         else{
33             carry=false;
34         }
35         --i;
36     }
37     cout<<stoi(str);
38     return 0;
39 }

 

posted @ 2020-02-16 03:16  NeoZy  阅读(225)  评论(0编辑  收藏  举报