DK04 - Làm tròn số

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Chắc hẳn bạn đã một hoặc vài lần sử dụng các hàm làm tròn trong các ngôn ngữ lập trình để làm tròn số. Vậy bạn có tự tin cài đặt lại một hàm làm tròn có sẵn đó không? Hãy viết chương trình làm tròn số thực ~n~ nhập từ bàn phím về số nguyên gần nhất (chênh lệch giá trị nhỏ nhất).

Hãy cố gắng không sử dụng các hàm làm tròn có sẵn của ngôn ngữ lập trình để hoàn thành bài tập nhé!

Input

  • Số thực ~n~

Giới hạn

  • ~-10^6 \le n \le 10^6~
  • Dữ liệu đầu vào đảm bảo có ít hơn 10 chữ số phần thập phân.

Output

Kết quả sau khi làm tròn

Sample

Input #1
12.567
Output #1
13
Input #2
5.5
Output #2
6
Input #3
-100.2999999
Output #3
-100

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    k192010  đã bình luận lúc 20, Tháng 4, 2024, 13:51

    help test 3


    • 0
      DHolmes8023  đã bình luận lúc 26, Tháng 4, 2024, 10:03

      Test case 3 là số âm nhé, -5.6 làm tròn là -6 chứ kp là -5


  • 0
    datleyt29102005  đã bình luận lúc 20, Tháng 4, 2024, 9:53

    mọi người ơi mình có thắc mắc là sao mình dùng mỗi một câu lệnh printf("%.0lf",n); thì nó vẫn hiện ra đúng tất cả các test trừ test cuối vậy nhỉ. Mình thấy cách này vừa ngắn ngọn vừa hợp lý mà :v


  • 0
    kimllwoo  đã bình luận lúc 18, Tháng 4, 2024, 17:35

    include <stdio.h>

    int main(void) { float a; float b = 1;

    scanf("%f", &a);
    
    if (a < 0) {
        b = -1;
        a = -a; // Take the absolute value of a
    }
    
    if ((a - (int)a) >= 0.5)
        a = (int)a + 1;
    else
        a = (int)a;
    
    printf("%d", (int)a * (int)b);
    return 0;
    

    }

    vẫn sai 1 test không biết sai chổ nào có cao nhân nào chỉ giúp với ạ


  • 0
    cnttepu8825  đã bình luận lúc 5, Tháng 4, 2024, 3:35

    int main() { double n; scanf("%lf",&n); int a=(int)n; if(n-a>=0.5) printf("%d",a+1); if(n-a<0.5) printf("%d",a);

    } Test pass all , sai case 3


  • -1
    NguyenLeviz  đã bình luận lúc 12, Tháng 3, 2024, 6:40

    import java.util.*;

    public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in);

        double n = sc.nextDouble();
    
        // Lay so nguyen la phan nguyen cua n
        int x = (int) n;
    
        double sub = Math.abs(n-x);
    
        if(n > 0){
            if(sub < 0.5){
                System.out.print(x);
            }else{
                System.out.print(x+1);
            }
        }else{
            if(sub <= 0.5){
                System.out.print(x);
            }else{
                System.out.print(x-1);
            }
        }
    }
    

    }


  • 0
    dtdungvnt  đã bình luận lúc 1, Tháng 3, 2024, 2:32

    n = float(input()) m = str(n) vt = m.find(".") nguyen = int(m[0:vt]) if (m[vt+1] >= "5"): if n >= 0: nguyen += 1 else: nguyen -= 1 print(nguyen)


  • 1
    phuong2008  đã bình luận lúc 20, Tháng 2, 2024, 7:03

    n = [float(i) for i in input().split()] S = 0 for i in n: S += i # Làm tròn số thực về số nguyên gần nhất roundednumber = int(i + 0.5) if i >= 0 else int(i - 0.5) print(roundednumber)


  • -6
    hohoanghai5042011  đã bình luận lúc 15, Tháng 2, 2024, 7:53

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 2
    ZeroNNT17  đã bình luận lúc 2, Tháng 2, 2024, 13:36

    include <stdio.h>

    include <math.h>

    int main() { double a; scanf("%lf",&a); int n = (int) a; if (fabs(a-n)<0.5) printf("%d",n); else if (fabs(a-n)>= 0.5) { if (n>0) printf("%d",n+1); else printf("%d",n-1); } return 0; }

    pass all test mn tham khảo.


  • 0
    ducminh2509  đã bình luận lúc 30, Tháng 1, 2024, 14:18

    case 3 là cái gì vậy mọi người, bị lỗi mãiii


  • -1
    letrungtuan  đã bình luận lúc 22, Tháng 1, 2024, 15:51

    case 3 là gì vậy mọi người


  • 0
    DKN13  đã bình luận lúc 11, Tháng 1, 2024, 1:37

    x = float(input()) tmp = x - int(x) if x>=0: if tmp>=0.5: print(int(x)+1) else: print(int(x)) else: if tmp != 0: if tmp <= -0.5: print(int(x)-1) else: print(int(x)) else: print(int(x))


  • 0
    thinhec12012007__  đã bình luận lúc 7, Tháng 1, 2024, 4:26

    include <bits/stdc++.h>

    using namespace std; double n; int main() { cin>>n; int nguyen=abs(int(n)); double tp; if(n>0) tp=abs(n-nguyen); else tp=abs(n+nguyen); double tam=int(tp*10); if(tam>=5) { if(n<0) cout<<int(n)-1; else cout<<int(n)+1; }

    else cout<<int(n); return 0; }


  • 0
    Kha_ga_k29  đã bình luận lúc 30, Tháng 12, 2023, 5:55

    using System;

    namespace DK04 {

    internal class Program
    {
    
        static void Main(string[] args)
        {
    
            double a = double.Parse(Console.ReadLine());
    
            Console.Write($"{a:0}");
    
        }
    
    }
    

    }


  • -14
    hohoanghai5042011  đã bình luận lúc 27, Tháng 12, 2023, 13:21

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • 2
      lebinhminh12345679  đã bình luận lúc 6, Tháng 1, 2024, 8:43

      đề không sử dụng các hàm làm tròn mà bạn


  • 0
    hieuhy3112005  đã bình luận lúc 19, Tháng 12, 2023, 17:01

    include <stdio.h>

    include <math.h>

    int main () { double n; scanf ("%lf", &n); int a = (int) n; if (n - a >= 0.5) { int b = a + 1; printf ("%d", b); } else { printf ("%d", a); } return 0; } sai case 3 là sao v mn


  • 0
    Quy123a  đã bình luận lúc 19, Tháng 12, 2023, 9:45

    include <stdio.h>

    int main() { double n; int x; scanf("%lf", &n);

    x = (int)n;
    
    if (n - x <= 0.5) {
        printf("%d\n", x);
    } else {
        printf("%d\n", x + 1);
    }
    
    return 0;
    

    } sai case 3 với case 7 là sao mọi người


    • 0
      lehongduc  đã bình luận lúc 9, Tháng 1, 2024, 4:46

      chắc do kiểu dữ liệu đó bạn mình cũng sai vậy sửa kiểu dữ liệu thì đúng thêm dc case 7=)


  • 1
    uwuimnotfkinggaybutoaiisgay  đã bình luận lúc 14, Tháng 12, 2023, 14:25

    include <bits/stdc++.h>

     using namespace std;
     int dawg(double n){
       int t=(int)n;
       n-=t;
          if(n>=0.5){
              return (int)(n+1+t);
                }else return (int)(t);}
    
    
    
     int main()
    {
     double n;
     cin>>n;
     int d=1;
     if(n&lt;0){
         n=abs(n);
         d*=-1;
    }
    cout<&lt;dawg(n)*d;
    return 0;
         }
    code đây nhé
    

  • 0
    nguyennhat7185  đã bình luận lúc 14, Tháng 12, 2023, 9:15

    case 7 là gì v mn


  • 2
    nguyenxuantho_2003  đã bình luận lúc 6, Tháng 12, 2023, 3:50

    -Float (float): Có độ chính xác khoảng 7 chữ số thập phân. -Double (double): Có độ chính xác khoảng 15 chữ số thập phân. Đề yêu cầu là Dữ liệu đầu vào đảm bảo có ít hơn 10 chữ số phần thập phân. Nên test Case 6 để kiểu dữ liệu fload là sai nhé!!


  • 0
    TQThong2k11  đã bình luận lúc 1, Tháng 12, 2023, 2:10

    include <bits/stdc++.h>

    define str string

    typedef long long ll; typedef double dou;

    using namespace std; dou n; int main(){ cin >> n; if(n < 0){ cout << ll(n + 0.5) - 1; } else cout << ll(n - 0.5) + 1; return 0; } đây là code C++ mình nghĩ là đơn giản nhất ^^


  • 0
    anhtuan7_1  đã bình luận lúc 5, Tháng 11, 2023, 12:11

    include<bits/stdc++.h>

    using namespace std; int main() { double n; cin >> n; int i = n/1; double b = i -1 -n; double c = i + 1 -n ; if ( (c > 0.5 and c <= 1) or (-1 <= b and b < -0.5) ) { cout << i; } else if ( n > 0 ) { cout << i + 1; } else { cout << i -1; } return 0; }


  • 2
    tranxuanbac  đã bình luận lúc 1, Tháng 11, 2023, 14:36

    tachj case 6 tai ai giai thich voi

    include<stdio.h>

    include<math.h>

    int main(){ float a;scanf("%f",&a); if(a<=-1||a>=1){ int b=a/1; a-=b;

    if(a>=0.5){printf("%d",b+1);}
    else if(a>=0 && a&lt;0.5){printf("%d",b);}
    else if(a<=0 && a>= -0.5){printf("%d",b);}
    else if(a<-0.5){printf("%d",b-1);}}
    else{
        if(a>0.5){printf("1");}
        else if(a>=0&&a&lt;0.5){printf("0");}
        else if(a<0&&a>-0.5){printf("0");}
        else if(a<-0.5){printf("-1");}
    }
    

    }


  • 2
    taithikgirl  đã bình luận lúc 28, Tháng 10, 2023, 2:28

    hao no


  • -1
    dungnt_99  đã bình luận lúc 22, Tháng 10, 2023, 4:01 sửa 2

    số 6 input là gì ?


    • -1
      fIshx2  đã bình luận lúc 8, Tháng 12, 2023, 15:11

      doi float thanh double


  • -1
    VoPhatDat  đã bình luận lúc 19, Tháng 10, 2023, 4:03

    include <iostream>

    include <math.h>

    using namespace std;

    int main() {

    double a;
    cin >> a;
    long b = long(a);
    cout << (abs(abs(a) - abs(b)) >= 0.5 ? (a < 0) ? -(abs(b) + 1) : ++b : b) << endl;
    
    return 0;
    

    }


  • -16
    henry  đã bình luận lúc 7, Tháng 10, 2023, 2:46

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 0
    KhangVN098  đã bình luận lúc 5, Tháng 10, 2023, 15:59

    Ai sai case 6 thì nhớ xem coai có để float hong nhé, nếu có nhớ chuyển sang double là đc nha


    • -4
      Bachuthegioi  đã bình luận lúc 14, Tháng 10, 2023, 14:08

      cho em hỏi tại sao v ạ


      • 1
        doquockien  đã bình luận lúc 27, Tháng 10, 2023, 14:38

        Kiểu float (số thực) chiếm 4 byte và có thể có tới 6 con số phần sau dấu thập phân, trong khi double chiếm 8 bytes và có thể có tới 10 con số phần thập phân


  • -5
    quanleb4  đã bình luận lúc 1, Tháng 9, 2023, 13:44

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 0
    bebebe  đã bình luận lúc 1, Tháng 9, 2023, 10:39

    include <iostream>

    include <math.h>

    using namespace std; int main() { double n; cin >> n; int i = n/1; double b = i -1 -n; double c = i + 1 -n ; if ( (c > 0.5 and c <= 1) or (-1 <= b and b < -0.5) ) { cout << i;} else if ( n > 0 ) { cout << i + 1;} else {cout << i -1;} return 0; }


  • 0
    dicode  đã bình luận lúc 1, Tháng 9, 2023, 2:56

    cho em hỏi sai ở test case 6 là sao vậy ạ


    • 0
      anhdeptrai1912  đã bình luận lúc 15, Tháng 9, 2023, 3:24

      ké ạ mình cũng sai case 6 k biết sao


  • 0
    nightfury1409  đã bình luận lúc 26, Tháng 8, 2023, 15:41

    C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

    namespace timsodu { class Program {

        static void Main(string[] args)
        {
    
            double a = double.Parse(Console.ReadLine());
            int b = Convert.ToInt32(a);
            if (a > 0)
            {
                double c = a - b;
                if (c == 0.5) Console.WriteLine(b + 1);
                else Console.WriteLine(b);
            }
            else
            {
                double c = b - a;
                if (c == -0.5) Console.WriteLine(b - 1);
                else Console.WriteLine(b);
            }
    
            Console.ReadLine();
        }
    }
    

    }


  • 0
    trinhtheanh3010  đã bình luận lúc 17, Tháng 8, 2023, 3:54

    include <stdio.h>

    include <math.h>

    int main() { double n; int solamtron; scanf("%lf", &n); if(n>=0){ double nguyen = (int) n; double thapphan = modf(n,&nguyen); if(thapphan>=0.5){ solamtron = nguyen + 1; }else{ solamtron = nguyen; } }else{ double nguyen = (int) n; double thapphan = modf(n,&nguyen); if(thapphan>=-0.5){ solamtron = nguyen; }else{ solamtron = nguyen - 1; } } printf("%d", solamtron); return 0; } mọi người thử xem bài này của mình nah test case đúng hết


  • 0
    trinhtheanh3010  đã bình luận lúc 16, Tháng 8, 2023, 15:18

    tui làm kết quả đúng cả âm lẫn dương mà từ case 3 tui sai hết, ai có code đúng ko tui tham khảo vs


    • -1
      kaede_chan04  đã bình luận lúc 17, Tháng 8, 2023, 8:26

      đây ông ơi

      include <iostream>

      include <math.h>

      using namespace std; int main() { double i,n; cin >> n; long int y = (long int)n; i = n - y; if ((abs(i)) >=0.5) { if (n >0) y +=1; else y -=1; } cout << y; }


  • -4
    phamnhatduc555  đã bình luận lúc 13, Tháng 8, 2023, 17:28

    CODE DAY ANH THAM KHAO. DUNG HET TEST RI NHA...............................................................................

    n = float(input()) if n<0: s= n- int(n) if s <= -0.5: n += -0.5 print(int(n),end='')

    else: s = n - int(n) if s >= 0.5: n += 0.5 print(int(n),end='')


  • -3
    Long_Cuber2012  đã bình luận lúc 7, Tháng 8, 2023, 14:07

    Tui giải kiểu Tiểu học:) n = float(input()) if n >= 0: n += 0.5 print(int(n)) else: n -= 0.5 print(int(n))


  • -1
    namchamhoccode  đã bình luận lúc 4, Tháng 8, 2023, 9:08

    Test case 6 kiểm tra gì vậy mn, mình bị lỗi hoài :((


  • 1
    Giang1235  đã bình luận lúc 2, Tháng 8, 2023, 16:59

    Cách giải đơn giản của mình :

    n = float(input()) a = int(n) - float(n) if (abs(a)*10) >= 5: if int(n) > 0: print(int(n)+1) else: print(int(n)-1) else: print(int(n))


  • 0
    violet_pho_hoc_tap  đã bình luận lúc 2, Tháng 8, 2023, 11:16

    chú ý số âm và a.49999999999999 thôi, 1 là so sánh tường minh (khi vượt quá độ chính xác của kiểu double thì khi xuất nó ra a.5 chứ nó vẫn là a.49999999999 ), 2 là sử lý xâu tìm dấu chấm đồ.


  • 0
    trungle  đã bình luận lúc 29, Tháng 7, 2023, 7:57

    Dùng hàm round và cần chú ý đến case 3


  • 0
    vietanh092004  đã bình luận lúc 25, Tháng 7, 2023, 9:18

    chu y den so 0.5 nhe mn

    from math import * a = float(input()) print((ceil(a)-1, ceil(a))[ceil(a) - a <= 0.5])


  • 0
    hieudz2502  đã bình luận lúc 24, Tháng 7, 2023, 13:19

    Bài này nếu không dùng hàm có sẵn thì sử dụng string, kiểm tra kí tự đầu sau dấu . rồi xử lý, nhớ cẩn thận trường hợp có dấu - ở đầu


  • 0
    Tranh  đã bình luận lúc 21, Tháng 7, 2023, 15:52

    Case 6, với case 7 có giá trị là gì ấy mọi người. Em thử với cách round off mà ko qua được ạ


  • 0
    khoadang09  đã bình luận lúc 18, Tháng 7, 2023, 10:54

    Sao sai nhỉ mng ?

    print("{:.0f}".format(float(input())))
    

  • 0
    khanh2925  đã bình luận lúc 11, Tháng 7, 2023, 9:36

    Bài này làm sao vậy ạ :))


  • -7
    khanh2925  đã bình luận lúc 10, Tháng 7, 2023, 7:15

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -6
    huyhoanhbo12  đã bình luận lúc 9, Tháng 7, 2023, 10:13

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 0
    thiennguyen  đã bình luận lúc 9, Tháng 7, 2023, 5:00

    Tôi làm mà ko cần dùng hàm có sẵn nhé =))


    • -7
      lek176234  đã bình luận lúc 10, Tháng 7, 2023, 5:13

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • 0
      huynguyenchinh4  đã bình luận lúc 9, Tháng 7, 2023, 14:00

      xin chỉ giáo


    • 0
      codeovertime  đã bình luận lúc 9, Tháng 7, 2023, 6:16

      giỏi quá cậu