In ra các chữ số của 1 số mà không dùng vòng lặp



Em cũng có tìm ra cách giải, trong đó có sử dụng hàm pow, tuy nhiên đề lại cấm chữ include. vậy e xin hỏi bài này có cách làm nào khác không ạ, và phải tuân thủ theo các luật cấm của đề. E cám ơn

Chia cho 10 lấy phần dư
du = a % 10
a = a / 10
Lặp đến chừng nào số a còn lại < 10 thì dừng.

1 Like

nếu vậy thì nó in từ dưới lên chứ nhỉ ?

#include <iostream>
using namespace std;
int main()
{
    int digit=0, index=0;
    int *arr= new int;
    int n; cin >> n;
    while(n>0)
    {
        digit=n%10;
        n=n/10;
        arr[index++]=digit;
    }
    for(int i=index-1; i>=0; i--)
    {
        cout << arr[i] << endl;
    }
}

bị cấm dùng for bác ơi :frowning: có cái hình ở dưới e có ghi các từ bị cấm ấy.

Có rất nhiều cách để làm nó in từ trên xuống. Lưu kết quả vào mảng, lưu kết quả vào stack, chia cho 10^x thay vì lấy phần dư…
Đây là 1 cách đệ quy:

void In_Chu_So(int a)
{
	if (a < 10) {
		printf("%d\n", a); 
		return;
	}
	In_Chu_So(a / 10);
	printf("%d\n", a % 10);
	return;
}
7 Likes

Lầy đến cùng luôn.

string s; // hoặc chơi char*
cin >> s;
f\
or (int i = 0; i < s.size(); i++)
    cout << s[i] << endl;
5 Likes

đề bài ban for a ơi…

f\
or

là for nhưng máy chấm không biết đâu. Mình đã giúp 1 bạn bằng cách này rồi :grin:

4 Likes

giờ em mới biết có kiểu này :sweat_smile:

Cái này chủ yếu dùng để viết mỗi tham số xuống dòng cho đẹp :smiley: vì viết hết 1 dòng dài quá ko muốn đọc.

3 Likes

cám ơn a nhiều nhé <3

À đc r cám ơn a nhiều nhé. nhưng vẫn bị sai 3 testcase e chưa hiểu nguyên nhân

Chắc là test 0 đầu ấy mà (nếu bạn dùng cách “lầy lội”) :smiley:

Code đó còn lầy theo kiểu dùng string thay vì chia 10.

4 Likes

bạn dùng đệ quy như bạn Red Sand nói ấy.

1 Like

không phải test 0 đầu đâu ạ. code e có lọc tất cả các trường hợp 0 đâu mà :smile: nhưng mà e dùng cách của a HK boy rồi :v cách ghê vãi

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