火星計數法
Problem Description
Input
Output
Sample Input
2 a ab
Sample Output
1 6
Hint
快速冪
參考:https://blog.csdn.net/qq_16255321/article/details/41983919
https://blog.csdn.net/alps1992/article/details/42131581
Source
//package leslie;//本題可以看做是求五進制串表示的值
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n=cin.nextInt();
String getchar=cin.nextLine();
while(n-->0)
{
char arr[]=cin.nextLine().toCharArray();
long sum=0;
for(int i=0;i<arr.length-1;i++)
sum=(sum+arr[i]-'a'+1)*4;
sum=sum+arr[arr.length-1]-'a'+1;//加上字符串最後一位表示的值
sum%=10000007;
System.out.println(sum);
}
cin.close();
}
}
//package leslie;//本題因爲數值較大,可以用快速冪求解
import java.util.*;
public class Main {
static char arr[] = new char[105];
final static int Mod = 10000007;
public static long Fast_Power(long p, long n) { // 快速冪
long ans = 1, base = p;
while (n != 0) {
if (n % 2 == 1)
ans *= base % Mod;
base *= base % Mod;
n = n / 2;
}
return ans;
}
public static void Ans() {
long sum = 0;
for (int i = 0; i < arr.length; i++) {
long n = arr[i] - 'a' + 1;
sum = (sum + (n * Fast_Power(4, arr.length - i - 1))) % Mod;// 可以把字符串每一位看成一層,一層一層疊加求出答案
}
System.out.println(sum);
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
String getchar = cin.nextLine();
while (n-- > 0) {
arr = cin.nextLine().toCharArray();
Ans();
}
cin.close();
}
}
/*
* 快速冪另一種寫法 if(n==0)return 1; long ans=Fast_Power(p,n/2); ans=ans*ans%Mod;
* if(n&1)ans=ans*p%Mod; return ans;//n&1即n%2==1
*/