Cần giúp bài tách chữ số

Giúp em bài C++ này với ạ, Em năm nay lớp 12 ạ. Còn khoảng một tháng nữa là sẽ thi thành phố môn tin học.

Viết chương trình nhập 1 số có 5 chữ số, tách số đó ra thành các chữ số và in ra màn hình, ngăn cách nhau bởi 3 dấu cách
VD 12345
in ra 1 2 3 4 5
em cảm ơn!

1 Like

Gợi ý cho bạn là dùng chỉ cần lấy số đó module cho 10 là được chữ số cuối cùng rồi

1 Like

Bạn cứ lấy số đó chia cho 10 lấy dư sẽ được chữ số cuối. Để loại bỏ số cuối mà mình đã có thì bạn lấy số đó chia cho 10 lấy nguyên. Lặp lại như vậy thôi :smiley:

dùng lệnh lặp thôi;;
lấy phần dư số n chia cho 10;
gán số n=n/10;
tiếp

Sao k đọc số dưới dạng chuỗi rồi in ra

1 Like

chia cho 10 lấy phần dư

Nếu đề bài cho nhập dạng chuỗi thì mới được nha bạn. còn ví dụ đề yêu cầu nhập số kiểu int hay long thì lại khác

Bạn tham khảo :smiley: Mình mới học C thôi nên không biết đúng không :smiley:

1 Like

Mình thì không học bên C++ nên không rành lắm mà mình biết cách làm bên pascal nên bạn có thể tham khao cách làm rồi viết bằng C++ cũng được

var n,i:integer;
    x,y,kq:string;
begin
    write('Nhap so: '); readln(n);
    x:='';y:=' ';kq:='';
    str(n,x);
    for i:=length(x) downto 1 do kq:=kq+X[i]+y;
    while kq[1]='0' do delete(kq,1,1);
    write('ket qua: ',kq);
    readln
end.

Trong C++ có ToString() không nhỉ :smiley:

2 Likes

Đây nhé.:slight_smile:

bài này k chạy đc bạn ạ

Given the number 12345:

5 is 12345 % 10
4 is 12345 / 10 % 10
3 is 12345 / 100 % 10
2 is 12345 / 1000 % 10
1 is 12345 / 10000 % 10

Nguồn: https://stackoverflow.com/questions/4261589/how-do-i-split-an-int-into-its-digits

Code này chỉ dành cho trích xuất cố định thôi. Mà có thế này tại sao phải dựng lên cái object string để làm gì cơ chứ.

1 Like
#include <iostream >
#include <string.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
#define Max 100
int main() {
	do {
		//Khai báo biến ở đây.
		int n, t;
		//Lệnh của chương trình đặt ở đây.
		cout << "Nhap n: ";
		cin >> n;
		int x = n;
		n = abs(n);
		int dem = 0;
		do {
			n /= 10;
			dem++;
		} while (n);
		int tong = 0;
		while (x >= 0 && dem > 0) {
			dem--;
			t = x / pow(10, dem);
			x %= int(pow(10, dem));
			cout << t << endl;
		}
		cout << "Nhap phim ESC de thoat!\n";
	} while (_getch() != 27);
	return 0;
}

theo mình thấy thì nếu tách n và xuất thôi thì nó lại theo chiều ngược nên tốt nhất cứ tính số đảo ngược của n trước và tạo thêm 1 vòng lặp while để tách và xuất số đảo ngược của n thì nó sẽ xuất theo thứ tự của đề bài

int t,n,s=0;
cout<<"\nNhap n: ";cin>>n;
while(n!=0) 
{
	s=s*10+n%10;
	n=n/10;
}
while(s!=0)
{
	t=s%10;
	cout<<t<<" ";
	s=s/10;
}
1 Like

có cách nào mà tách xong in ra 1 2 3 4 không bạn

Bạn làm theo cách này là đc
Lấy phần nguyên của phép chia 12345/10000 ta lấy được số 1
Lấy phần nguyên của phép chia 12345/1000 ta lấy được số 12 rồi chia cho 10 lấy dư. Các số sau tương tự. Đây là mẫu

#include<stdio.h>
int main()
{
int n= 12345;
int a,b,c,d,e;
a= n/10000;     // kiểu biến a là int nên nó lấy nguyên

b= n/1000%10; // ta được 12. Rồi lấy phần dư phép chia 10 ta được số 2

c = n/100%10;  // tương tự biến b ta được số 3

d = n/10%10;
e = n/1%10 ; 

printf(“%i %i %i %i %i”,a,b,c,d,e);

return 0;
}

Mới lớp 12 thôi. Códe đơn giản thôi cho dễ hiểu

Cũng có thể làm như sau

#include<stdio.h>
#include<math.h>
int main(){
int a;     // a là số nguyên có n chữ số 
int n;
float k=a/pow(10,n-1)
scanf(“%d %d”,&a,&n);   // nói chung là nhập giá trị a&n
int i;
for(i=0;i<n;i++){
print(“%i”, (int)k%10)
k=k*10
}
}

Đấy đơn giản thế thôi ko phức tạp như mấy bạn nghĩ đâu.

này bạn dùng while chỉ đến được 10^6
còn string thì 10^18

dùng string sẽ được dài hơn
nếu đi thi THT bảng C thì bài này thường sẽ nằm ở mức 10^18 (thường là bài đầu )

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