Tính tổng giai thừa bị sai

Mn xem giúp e chỗ tính tổng s với ạ. kbiet vì sao k ra giống

code

#include<stdio.h>
int main(){
	int a,j,r;
	scanf ("%d",&a);
	int n=a,gt=1,s=0;
	while(a){
		r=a%10;
		for(j=1;j<=r;j++){
			gt*=j;
		}
		s+=gt;
		a/=10;
	}
	
	if (s==n) printf ("1");
	else printf ("0");	
	return 0;
}

Cậu gặp vấn đề khi không reset biến gt.
Có 2 phương án giải quyết:

  1. cậu reset nó trong vòng while
  2. cậu khai báo biến gt trong vòng while (Tớ recommend cách này). Cậu có thể tham khảo code dưới đây.
#include <stdio.h>

int main() {
    int number = 0; // Good name of variable is a must!
    scanf("%d", &number);

    int original = number, sum = 0;

    while(number) {
        // Reduce the variable scope as much as possible
        int lastDigit = number % 10;
        int factorial = 1;

        int i; // Should be always i, and in as smallest scope as possible
        for(i = 1; i <= lastDigit; i++) {
            factorial *= i;
        }
        sum += factorial;
        number /= 10;
    }

    if (sum == original) {
        printf ("1");
        return 0; // avoid evil else as much as possible
    }

    printf ("0");
    return 0;
}

4 Likes
// function tính giai Thừa
int giaiThua(int x){
	int result=1;
	for(int i=1;i<=x;i++){
		result*=i;
	}
	return result;
}

//function kiểm tra số Strong
int isStrongNumber(int value){
	int sum=0;
	while(value>0){
		sum+=giaiThua(value%10);
		value/=10;
	}
	if(sum==value){
		return 1;
	}
	return 0;
}
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?