Code liệt kê các số armstrong bị sai

Đề bài: Viết chương trình C cho phép nhập vào n và thực hiện liệt kê các số arstrong nhỏ hơn n. (Mỗi kết quả thỏa mãn cách nhau một khoảng trắng)
INPUT
1000
OUTPUT
1 2 3 4 5 6 7 8 9 153 370 371 407
e chạy thử thấy kết quả ra đúng mà nộp lên tool của thầy giáo toàn chấm sai.

#include <stdio.h>
#include <math.h>
#define MAX 10000

int kTraArmstrong(int n){
	int k=0,a[MAX]={},m;
	m=n;
	while (m!=0){
		a[k]=m%10;
		k++;
		m/=10;
	}
	for (int i=0; i<=k; i++){
		m=m+pow(a[i],k);
	}
	
	if (n==m)
		return 1;
	else return 0;
}

void lietKeArmstrong(int x){
	int a[MAX];
	x++;
	for (int j=1;j<x; j++){
		if (kTraArmstrong(j))
			a[j]=1;
		else a[j]=0;
	}
	for (int j=1; j<x;j++){
		if (a[j])
			printf ("%d ", j);
	}
}

int main(){
	int x;
	scanf("%d", &x);
	lietKeArmstrong(x);
	return 0;
}

Bác có thể nói rõ chấm sai là sai như nào không ?

1 Like

Xài pow hên xui lắm. Bài này tính toán số nguyên thì dùng phép nhân số nguyên thôi, bữa có người dính số 75 rồi (GCC-TDM, nếu dùng CB sẽ gặp)
Ngoài ra còn có thể bắt khoảng trắng cuối cùng :smiley: sửa lại câu pow đã.

Giờ để biết máy nào đúng: float x = 5.0, y = 7.0; assert(pow(x, 2.0) + pow(y, 2.0) == 74UL);. Assert sẽ kick ngay khi điều kiện không thỏa “Assert … failed”.

1 Like

Bạn làm bài ở hệ thống medianews đúng ko, trong đấy dùng void auto sai!! Bạn chuyển sang dùng int xem

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