Bài toán kinh điển trong lập trình

Tổng hợp những bài toán trong lập trình, ngẫu nhiên từ cơ bản đến nâng cao.

Kiểm tra số tự mãn (Narcissistic Number) Kiểm tra số tự mãn (Narcissistic Number) Kiểm tra số tự mãn (Narcissistic Number) Kiểm tra số tự mãn (Narcissistic Number) Kiểm tra số tự mãn (Narcissistic Number) 4.3/5 (165 reviews)

Kiểm tra số tự mãn (Narcissistic Number)

Đã đăng 2016-12-27 12:14:46 bởi Kteam
7 bình luận 18118 lượt xem
Kiểm tra số tự mãn (Narcissistic Number) 4.3 /5 stars (3 reviews)
 
 

Mục tiêu

Làm quen cách viết các chương trình đơn giản, cách sử dụng:


Mô tả bài toán

Cho số nguyên dương n, kiểm tra n có là số tự mãn (Narcissistic Number) không.

Ví dụ:

  • Input:                                153
  • Output:            Là số tự mãn 3 chữ số

Hướng dẫn

Định nghĩa

Số tự mãn (Narcissistic Number) là một số mà có tổng của từng chữ số mũ n (n >= 2) bằng chính nó.

Ví dụ:

  • Số tự mãn 3 chữ số: 153 = (1 * 1 * 1) + (5 * 5 * 5) + (3 * 3 * 3).
  • Số tự mãn 4 chữ số: 8208 = (8 * 8 * 8 * 8) + (2 * 2 * 2 * 2) + (0 * 0 * 0 * 0) + (8 * 8 * 8 * 8)

Thuật toán

  • Đếm số chữ số của số nguyên dương n
  • Tách từng chữ số của n, và tính tổng của các chữ số mũ (với mũ bằng số lượng chữ số của n)
  • So sánh n và tổng vừa tính. N là số tự mãn nếu kết quả bằng nhau, và ngược lại.

 

Bài tập mang tính tham khảo, hỗ trợ các bạn làm quen và luyện tập với các bàn toán lập trình cơ bản trong C++.

Kteam khuyến khích các bạn tự phân tích đề bài > tự giải bài toán > debug để kiểm tra kết quả và fix lỗi trong quá trình giải. Sau đó, bạn có thể tham khảo source code mẫu để hoàn chỉnh bài tập. 

Để được hỗ trợ tốt nhất, bạn có thể đặt câu hỏi ở phần bình luận bên dưới bài viết hoặc ở mục Hỏi & Đáp.

 

Source code tham khảo

Hearder.h

// Header.h
#ifndef _HEADER_
#define  _HEADER_

int demSoChuSo(int nInput);
bool laSoTuMan(int nInput);

#endif // _HEADER_

Source.cpp

// Source.cpp
#include <iostream>
#include "Header.h"
using namespace std;

int main()
{
	int nInput;
	cout << "Enter n(integer): ";
	cin >> nInput;

	if (laSoTuMan(nInput))
	{
		cout << nInput << " la so tu man co " << demSoChuSo(nInput) << " chu so." << endl;
	}
	else
	{
		cout << "Khong phai so tu man." << endl;
	}

	return 0;
}

// Đếm số chữ số của số nguyên dương
int demSoChuSo(int nInput)
{
	int nCount(0);
	while (nInput != 0)
	{
		nInput = nInput / 10;
		nCount++;
	}
	return nCount;
}

// Kiểm tra số tự mãn
bool laSoTuMan(int nInput)
{
	int nNumOfDigits = demSoChuSo(nInput);
	int nRem, nSum(0);

	int nTemp = nInput;
	while (nTemp != 0)
	{
		// Tách từng chữ số của n từ phải sang trái
		nRem = nTemp % 10;

		// Tính tổng của các chữ số mũ (với mũ bằng số lượng chữ số của n)
		nSum = nSum + pow(nRem, nNumOfDigits);

		// Loại bỏ từng chữ số của n từ phải sang trái
		nTemp = nTemp / 10;
	}
	return (nSum == nInput);
}

Kết luận

Bạn có thể củng cố kiến thức C++ từ khóa Lập trình C++ cơ bản.

Hoặc tìm hiểu thêm các bài tập khác trong khóa Bài toán kinh điển trong lập trình

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.

 

Chia sẻ:
Thảo luận Hỏi và đáp Báo lỗi bài viết
Hủy bỏ   hoặc  
Kiểm tra số tự mãn (Narcissistic Number)
CáThíchLeoCây 2018-08-05 23:14:16
number = int(input("nhap vao so nguyen:"))

def dem_so(n):
    num = 0
    while n > 0:
        num += 1
        n /= 10
    return num

so_mu = dem_so(number)

def kiem_tra(n):
    r = 0
    Sum = 0
    num = n
    while n > 0:
        r = n % 10
        Sum += r**so_mu
        n /= 10
    if num == Sum:
        print num,"la so tu man"
    else:
        print num,"khong la so tu man"

kiem_tra(number)

 

0 bình chọn
Reply
Kiểm tra số tự mãn (Narcissistic Number)
dvkhangnt 2018-05-26 14:52:47

Ai hướng dẫn mình code bài này bằng đệ qui với ạ! e cảm ơn :) :)

0 bình chọn
Reply
Kiểm tra số tự mãn (Narcissistic Number)
tvc12591 2018-05-01 11:05:48

Python

def sotuman(_n):
    _dem = demso(_n)
    _sum = 0
    _rem = 0
    while _n>0:
        _rem = _n % 10
        _sum = _rem**_dem + _sum
        _n = _n // 10
    return _sum
def kiemtrasotuman(_n):
    if _n == sotuman(_n):
        print('Đây là số tự mãn')
    else:
        print('Đây không phải là số tự mãn')
kiemtrasotuman(8208)

 

0 bình chọn
Reply
Kiểm tra số tự mãn (Narcissistic Number)
thob2105 2017-10-29 13:18:20

k dung thu vien cmath ma van dung dk pow la the nao a?

 

0 bình chọn
Reply
Kiểm tra số tự mãn (Narcissistic Number)
minhtuancnttk39 2017-07-10 11:34:37
int digits = (int)log10(n) + 1;

Fix cho mã bên dưới, admin có thể thêm phần edit comment được kg ạ.

1 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
K9 2017-07-10 21:10:50
đang code thêm phần đó nhé bạn
0 bình chọn
Reply
Kiểm tra số tự mãn (Narcissistic Number)
minhtuancnttk39 2017-07-10 11:31:23

Đếm số chữ số có thể thay thế code đó bằng:

int digits = log(n) + 1;

Trong đó là số cần đếm.... :)

0 bình chọn
Reply
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  

Chiến dịch

Kteam - Howkteam Free Education