Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 데믈로 수(Demlo Number) 구현하기: 11…1의 제곱 패턴

데믈로 수란 무엇인가?

데믈로 수(Demlo number)는 11…1처럼 모든 자릿수가 1로 이루어진 수(10자리 미만)를 제곱했을 때 얻어지는 회문수입니다. 예를 들어 1111² = 1234321처럼, 결과가 1부터 차례대로 커졌다가 다시 작아지는 완벽한 대칭 구조를 가집니다.

구현 아이디어

실제로 큰 수의 곱셈을 수행할 필요 없이, 문자열 조작만으로 결과를 손쉽게 만들 수 있습니다. 알고리즘은 다음 두 단계로 구성됩니다.

  1. 첫 번째 반복문에서 1부터 n까지 숫자를 차례대로 이어 붙입니다.
  2. 두 번째 반복문에서 n−1부터 1까지 역순으로 이어 붙여 대칭 구조를 완성합니다.

먼저 사용할 문자열 변수를 선언합니다.

string demNum = "1111";
string square = "";

첫 번째 반복문은 demNum 문자열의 길이만큼 순회하며, 인덱스 값 i를 문자로 변환한 뒤 square 변수에 추가합니다.

for(int i = 1; i <= demNum.length(); i++){
    square += char(i + '0');
}

두 번째 반복문은 demNum 길이에서 1을 뺀 값부터 시작해 1까지 역방향으로 순회하며, 같은 방식으로 문자를 추가합니다.

for (int i = demNum.length() - 1; i >= 1; i--)
    square += char(i + '0');

전체 예제 코드

아래 전체 구현을 통해 데믈로 수 생성 과정을 더 잘 이해할 수 있습니다.

#include <iostream>
using namespace std;

int main(){
    string demNum = "1111";
    string square = "";
    for(int i = 1; i <= demNum.length(); i++){
        square += char(i + '0');
    }
    for (int i = demNum.length() - 1; i >= 1; i--)
        square += char(i + '0');
    cout << square;
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

1234321

참고 사항

이 방법은 자릿수가 9 이하일 때만 유효합니다. 10자리 이상이 되면 올림(carry)이 발생해 단순한 대칭 패턴이 깨지기 때문입니다. 따라서 입력되는 1의 개수가 10개 미만일 때만 이 기법을 사용하는 것이 안전합니다.