五的倍數

思路:先用一個數組提前保存好2的n次方


#include <iostream>
#include <string> 
using namespace std;  
 
#define MAXN 100001
const int M=1e9+7;  

int f[MAXN]; 

void calculate()
{
	f[0]=1; 
	for (int i=1;i<MAXN;i++)
		f[i]=(2*f[i-1])%M; 
}

int main()
{
	int t; cin>>t; 
	string a;int b; 
	while (t--)
	{ 
		cin>>a>>b;  
		calculate(); 
		int s=a.size(); 
		long long sum=0,sum1=1,temp=1;  
		for (int i=0;i<s;i++) 
		{ 
			if(a[i]=='0'||a[i]=='5'){
				sum=(sum+f[i])%M; 
			}
		} 
		for (int i=1;i<b;i++)
		{ 
			temp=(temp*f[s])%M; 
			sum1=(sum1+temp)%M;   
		}  
		sum=(sum*sum1)%M; 
		cout<<sum<<endl; 
	}
	return 0; 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章