7-11 GC学姐与大水仙花 - 25笨蛋队专属新生赛赛前模拟(补题)
1.这是我开始的代码
只有5分(满分20)
cpp
#include <iostream>
#include <cmath>
using namespace std;
#define int long long
signed main()
{ int x;
cin>>x;
int sum=0;
int cnt=0;
int x1=x;
while(x1)
{x1/=10;
cnt++;
}
int i=1;
while(x)
{int replace=x%10;
sum+=pow(replace,i);
i++;
x/=10;
//cout<<sum<<endl;
}
int result=sum%(1000000000+7);
cout<<result;
return 0;
}
后面一看数据

才知道(因为long long只有19位的数字,而这个数据是十万零一位数字,long long已经无法满足数据要求)
要用高精度算法,又为了避免运行超时所以使用了预处理
2.终极代码
cpp
#include <iostream>
using namespace std;
#define int long long
int p[10][1000010]={0};
int m=1000000007;
string x;
signed main(){
//预处理
for(int i=0;i<10;i++)
for(int j=0;j<=1000000;j++){
if(j==0)p[i][j]=1;
else{
p[i][j]=p[i][j-1]*i%m;
}
}
cin>>x;
int digital=0;
int ans=0;
int j=1;
for(int i=x.size()-1;i>=0;i--){//忘记是-了
digital=x[i]-'0';
ans+=p[digital][j++];
ans%=m;//忘记取余了
}
cout<<ans;
return 0;
}
