https://www.acmicpc.net/problem/10820

다음과 같이 따로 N 을 입력받지 않으면서 계속 되는 테스트 케이스를 실행하기 위해서는
더 이상 입력이 들어오지 않거나 입력 데이터형의 에러 전까지 계속 받아들이는 EOF 를 사용하면 된다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
while (getline(cin, str))
{
int arr[4] = {
0,
};
for (int j = 0; j < str.length(); j++)
{
if (str[j] >= 'a' && str[j] <= 'z')
arr[0]++;
else if (str[j] >= 'A' && str[j] <= 'Z')
arr[1]++;
else if (str[j] >= '0' && str[j] <= '9')
arr[2]++;
else if (str[j] == ' ')
arr[3]++;
}
for (int k = 0; k < 4; k++)
{
cout << arr[k] << " ";
}
cout << "\n";
}
return 0;
}
stoi 는 string to int 로 int 형 범위 내에서 반환하므로 만약 int 형 범위 밖의 값을 정수로 바꾸고자 한다면
stoll 를 사용하면 된다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string A, B, C, D;
cin >> A >> B >> C >> D;
long long a = stoll(A + B);
long long b = stoll(C + D);
cout << a + b;
return 0;
}
이외에도 stod 나 stof, stoul, stoull 도 존재한다.
팩토리얼 0! 은 1이라는 사실을 깜빡했었다...
https://www.acmicpc.net/problem/11050
그래서 0에 대한 팩토리얼 값도 설정해주어야 한다...
0! 0 일 경우 과 같은 값을 계산하지 못하기 때문에
https://www.acmicpc.net/problem/15829
보통 long long 의 최댓값을 넘어가는 수가 계산되는 문제에서는
구한 값에 % 을 통해 값을 줄이곤 한다.
그러나 이때 언제 % 을 수행하냐에 따라 결과값이 달라지기 때문에
이를 유의해서 사용해야한다.
for (int i = 0; i < str.length(); i++)
{
sum = (sum + (str[i] - 'a' + 1) * b) % 1234567891;
b = (b * 31) % 1234567891;
}
for (int i = 0; i < str.length(); i++)
{
sum += (str[i] - 'a' + 1) * b) % 1234567891;
b = (b * 31) % 1234567891;
}
위의 두 코드는 sum 이 더해지는 시점이 다르기 때문에
다른 값을 가지게 되므로 주의하자!!