解题思路:
非常规解法,专门对付10^18次方的大数量级
注意事项:
参考代码:
#include<bits/stdc++.h>
using namespace std;
int k1[]={1,3,5,7,9},k2[]={0,2,4,6,8},b[10];
int cal(bool judge,int k){
int j=0;
if(judge==true) while(j<5&&k1[j]<=k) j++;
else while(j<5&&k2[j]<=k) j++;
return j;
}
bool mk(int k,int u){
if(k%2==0&&u%2==0) return true;
if(k%2!=0&&u%2!=0) return true;
return false;
}
int main(){
int k=0,sum,N,i;
cin>>N;
while(N>0) b[k++]=N%10,N/=10;
k%2==0?sum=cal(false,b[k-1]-1):sum=cal(true,b[k-1]-1);
if(k%2==0) sum-=1; sum*=pow(5,k-1);
int u=k; while(--u>0){ u%2==0?sum+=4*pow(5,u-1):sum+=5*pow(5,u-1);}
k-=1;
while(k>0){
if(mk(k,b[k]))
k%2==0?sum+=cal(false,b[k-1]-1)*pow(5,k-1):sum+=cal(true,b[k-1]-1)*pow(5,k-1);
k--;
}
cout<<sum+cal(true,b[k]); return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复