C언어/문제풀다 하나씩

이름을 해쉬함수 거쳐 바꿔보기 - honors method

mcdn 2020. 6. 23. 12:54
반응형
#include <iostream>
#include <string>
#include<cmath>
using namespace std;

string t;
double hasf(string name) {
	double sum = 0;
	double temp;
	double len = name.length();
	for (int i = 0; i < len;i++) {
		temp = pow(26, len - i - 1);
		double abc = name[i];
		temp = abc * temp;
		sum += temp;
	}
	return sum;
}

int main() {
	cin >> t;
	// JASON
	double sum = hasf(t);
	printf("%.0lf", sum);
}

입력 예제

JASON

출력 결과

35016904

 

1해시함수

우선 pow()함수는 (밑, 지수)로 제곱을 구해주는 함수다. 

pow()를 쓰려면 c언어에서는 math.h header를, c++언어에서는 cmath header를 선언해야 한다. 

 

그리고 대부분의 값은 int가 아니라 float랑 double로 구해지므로 double로 자료형을 맞춘다. 

 

자릿수마다 26의 자릿수 제곱을 구하고 

J의 아스키 코드를 제곱한 값에 곱한 후 

그 값을 sum에 더하는 것을 반복한다. 

 

 

반응형