#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
using namespace std;
int fun_C(int top, int bot);
int fun_cal(string str,int str_len);
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int k;
cin >> k;
string str;
int str_len, res_sum;
while (k > 0) {
cin >> str;
str_len = str.length();
res_sum = fun_cal(str, str_len);
cout << res_sum << endl;
k--;
}
return 0;
}
int fun_C(int top, int bot) {
if (top == 0) {
return 1;
}
int val_top = 1, val_bot = 1;
for (int i = 0; i < top; i++) {
val_top *= bot - i;
val_bot *= i + 1;
}
return val_top / val_bot;
}
int fun_cal(string str, int str_len) {
int tmp = str_len;
int res_sum = 0;
for (int i = 1; i < str_len; i++) {
res_sum += fun_C(i, 26);
}//先把长度小于的字符串的所有序号加上
int* arr_str;//用整数数组存放分割点
arr_str = (int*)malloc(4 * str_len);
for (int i = 0; i < str_len; i++) {
arr_str[i] = str[i] - 'a' + 1;
}
int arr_pos = 0;
for (int i = 1; i <= arr_str[str_len - 1]; i++) {
if (i < arr_str[arr_pos]) {
res_sum += fun_C(str_len - arr_pos - 1, 26 - i);
}
else {
arr_pos++;
}
}
free(arr_str);
return res_sum + 1;
}
写这些代码主要是自己的日常练习,也是一个新手,所以很简单。