Nhập 1 số tự nhiên, loại bỏ chữ số 5 và 0 khỏi số đó

mấy bác cho em hướng đi để giải quyết bài nhập 1 số tự nhiên ( vd : 307835627 ), loại bỏ số 5 và 0 , in ra màn hình là 3783627 , em nghĩ nguyên buổi rồi chưa ra :frowning:

Theo mình nghĩ thì chuyển số đó thành kiểu chuỗi
xong rồi duyệt chuỗi xem có kí tự nào là 0 or 5 thì xóa
sau đó lại chuyển thành kiểu số :smile:

1 Like

Hôm trước mình thấy có 1 bài là tỉnh tổng các chữ số của một số nguyên dương. Bài này thì cũng tương tự như vậy thôi, bạn tách từng số ra, nếu là số 5 hoặc số 0 thì bỏ qua.
Đại loại như thế này:

#include "stdio.h"

int main() {

	int value = 307835627;
	int temp = 0, heso=1;
	while (value > 0) {
		int k = value % 10;
		value = value/10;      
		if( k == 5 || k == 0) {
			continue;
		} else {
			temp = k*heso+temp;
			heso = heso*10;
		}
	}
	printf("%d", temp);
}
1 Like

Cảm ơn bạn, nghĩ quài cũng không ra được cái lênhj continue này :smile:

if( k == 5 || k == 0) {
			continue;
		} else {
			temp = k*heso+temp;
			heso = heso*10;
		}

thực chất ko cần lệnh continue chỉ cần viết

if( k != 5 || k != 0) {
            temp = k*heso+temp;
            heso = heso*10;
        }

vậy là đủ :smiley:

1 Like

Bạn có chắc điều kiện của if là đúng hay không? Nếu k = 5 thì k!= 5 || k != 0 vẫn cho kết quả là true

1 Like

Này là 1 cách bên java, lấy từng số ra so, nếu khác 0 & khác 5 thì đẩy vào sb (giống push_back bên c++) sau lật ngược chuỗi lại là ra =))
P/s: icon khác rồi nhỉ

1 Like

sao lại true dc ? điều kiện đã là khác 5 rồi màk bạn ?

1 Like

Nhưng đây là dấu || (hoặc) nghĩa là đúng khi một trong hai k!=5 hoặc k!=0 đúng mà. Nếu cả 2 cùng sai thì k!=5 || k!= 0 mới trả về 0 chứ nhỉ? Bạn test lại thử xem.

đã test mới thấy dc logic error :smile:

Tiện thể em hỏi luôn các bác :smiley: . Ví dụ có 1 mảng các số nguyên như sau : 6 3 4 1 5, bây giờ em muốn sắp xếp các phần tử lớn dần từ trái sang phải nhưng không theo cách duyệt hết các phần tử mà so sánh từng cặp từ trái qua phải xong từ phải qua trái. Ví dụ : 6 3 4 1 5 => 6 > 3
=> 3 6 4 1 5 => 6 > 4
=> 3 4 6 1 5 => 6 > 1
=> 3 4 1 6 5 => 6 > 5
=> 3 4 1 5 6 => 6 > 5 => giữ nguyên
=> 3 4 1 5 6 => 5 > 1 => giữ nguyên
=> 3 4 1 5 6 => 1 < 4 => đổi
=> 3 1 4 5 6 => 1 < 3 => đổi
=> 1 3 4 5 6

đây là phương pháp sủi bọt đúng không các anh chị.

for ( i = 0 ; i <= n-2 ; i++ )
   for ( j = i + 1 ; j <= n-1 ; j++)
      if ( a[ i ] > a[ j ] )
      {
           temp = a[ i ];
           a [ i ] = a [ j ];
           a[ j ] = temp;
      } 

tình hình là code zậy thôi, bạn tự khai báo , cũng chưa test nhak :smile:

yeah , bubble sort :smile:

Bạn nhập vào lưu vào biến string luôn đừng lưu biến longint, rồi bạn xét while pos(‘5’,st)<>0 rồi dùng hàm delete xoá nó, làm tương tự với số 0
P/s: sao mình cũng đăng bài tập mà bị cấm cờ xoá bài đăng buồn quá :frowning:

hình như do bạn dùng 2 acc trên cùng 1 IP nên nó phát hiện và xoá đó

bạn giúp mình làm hàm tính LOG cơ số 10 đc ko. mình lập trình cho vi điều khiển. khai báo thư viện math thì tốn bộ nhớ của vi điều khiển wa. :cry: thank bạn trước nhé

Mình hỏi nguyên nhân thì a Đạt bảo đừng hỏi bài tập -_-, tới giờ mình vẫn chưa nghĩ ra cách làm

Hỏi bài tập nhưng anh phải đưa ý tưởng của anh vào, nêu vấn đề anh gặp phải ra.

Có thể anh có nhiều ý tưởng cho nó, có thể những ý tưởng đó không hay, hoặc không đúng, nhưng nó thể hiện rằng anh có suy nghĩ nhưng nghĩ không ra, thể hiện rằng anh cũng có phần trong đó.

Mình có viết một bài hướng dẫn chi tiết thuật toán bubble sort. Bạn xem ở link sau nhé: http://chingovan.blogspot.com/search/label/algorithms

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?