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
help test 3
Test case 3 là số âm nhé, -5.6 làm tròn là -6 chứ kp là -5
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
include <stdio.h>
int main(void) { float a; float b = 1;
}
vẫn sai 1 test không biết sai chổ nào có cao nhân nào chỉ giúp với ạ
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
import java.util.*;
public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in);
}
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)
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
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.
case 3 là cái gì vậy mọi người, bị lỗi mãiii
case 3 là gì vậy mọi người
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))
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; }
using System;
namespace DK04 {
}
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
đề không sử dụng các hàm làm tròn mà bạn
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
include <stdio.h>
int main() { double n; int x; scanf("%lf", &n);
} sai case 3 với case 7 là sao mọi người
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=)
include <bits/stdc++.h>
code dai the
case 7 là gì v mn
-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é!!
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 ^^
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; }
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;
}
hao no
số 6 input là gì ?
doi float thanh double
include <iostream>
include <math.h>
using namespace std;
int main() {
}
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
Ai sai case 6 thì nhớ xem coai có để float hong nhé, nếu có nhớ chuyển sang double là đc nha
cho em hỏi tại sao v ạ
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
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
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; }
cho em hỏi sai ở test case 6 là sao vậy ạ
ké ạ mình cũng sai case 6 k biết sao
C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace timsodu { class Program {
}
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
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
đâ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; }
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='')
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))
Test case 6 kiểm tra gì vậy mn, mình bị lỗi hoài :((
Cách giải đơn giản của mình :
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 đồ.
Dùng hàm round và cần chú ý đến case 3
chu y den so 0.5 nhe mn
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
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 ạ
Bài này làm sao vậy ạ :))
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
Tôi làm mà ko cần dùng hàm có sẵn nhé =))
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
xin chỉ giáo
giỏi quá cậu