Fibonacci数列,快速幂
1 #include <cstdio> 2 struct Matrix{int a[5][5];}; 3 const int N=2,MOD=10007; 4 Matrix A,B,O,I; 5 Matrix Mul(Matrix A,Matrix B){ 6 Matrix C=O; 7 for(int i=1;i<=N;i++) 8 for(int j=1;j<=N;j++) 9 for(int k=1;k<=N;k++) 10 C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%MOD; 11 return C; 12 } 13 Matrix Pow(Matrix A,int n){ 14 Matrix B=I; 15 for(;n;n>>=1,A=Mul(A,A))if(n&1)B=Mul(B,A); 16 return B; 17 } 18 int main(){ 19 for(int i=1;i<=2;i++)for(int j=1;j<=2;j++)O.a[i][j]=0,I.a[i][j]=(i==j); 20 A.a[1][1]=0,A.a[1][2]=1; 21 A.a[2][1]=1,A.a[2][2]=1; 22 int n;scanf("%d",&n),B=Pow(A,n+1),printf("%d\n",B.a[1][1]); 23 return 0; 24 }
圆的面积
1 #include <cmath> 2 #include <cstdio> 3 typedef double db; 4 db r,pi=acos(-1); 5 int main(){ 6 scanf("%lf",&r),printf("%.7lf",pi*r*r); 7 return 0; 8 }
序列求和
1 #include <cstdio> 2 typedef long long ll; 3 ll ans,n; 4 int main(){ 5 scanf("%lld",&n),printf("%lld",(1+n)*n/2); 6 return 0; 7 }
A+B问题
1 #include <cstdio> 2 int main(){ 3 int a,b;scanf("%d%d",&a,&b),printf("%d",a+b); 4 return 0; 5 }
数列排序,STL使用
1 #include <queue> 2 #include <cstdio> 3 using namespace std; 4 priority_queue<int>q; 5 int main(){ 6 int n,a;scanf("%d",&n); 7 for(int i=1;i<=n;i++)scanf("%d",&a),q.push(-a); 8 for(int i=1;i<=n;i++)printf("%d ",-q.top()),q.pop(); 9 return 0; 10 }
十六进制转八进制,进制转化
1 #include <cstdio> 2 #include <string> 3 #include <cstring> 4 #include <iostream> 5 using namespace std; 6 char s[100010]; 7 int main(){ 8 int n,len,num,ok;scanf("%d",&n); 9 for(int i=1;i<=n;i++){ 10 scanf("%s",s+1),len=strlen(s+1); 11 string ans=""; 12 for(int i=1;i<=len;i++) 13 switch(s[i]){ 14 case ‘0‘:ans+="0000";break;case ‘1‘:ans+="0001";break; 15 case ‘2‘:ans+="0010";break;case ‘3‘:ans+="0011";break; 16 case ‘4‘:ans+="0100";break;case ‘5‘:ans+="0101";break; 17 case ‘6‘:ans+="0110";break;case ‘7‘:ans+="0111";break; 18 case ‘8‘:ans+="1000";break;case ‘9‘:ans+="1001";break; 19 case ‘A‘:ans+="1010";break;case ‘B‘:ans+="1011";break; 20 case ‘C‘:ans+="1100";break;case ‘D‘:ans+="1101";break; 21 case ‘E‘:ans+="1110";break;case ‘F‘:ans+="1111";break; 22 }//printf("%s\n",ans.c_str()); 23 switch(len%3){ 24 case 1:ans="00"+ans;break; 25 case 2:ans="0"+ans;break; 26 } 27 len=ans.length();ok=0; 28 for(int i=0;i<len;i+=3){ 29 num=4*(ans[i]-‘0‘)+2*(ans[i+1]-‘0‘)+(ans[i+2]-‘0‘);//printf("%c %c %c\n",ans[i],ans[i+1],ans[i+2]); 30 if(num)ok=1;if(ok)putchar(num+‘0‘); 31 } 32 puts(""); 33 } 34 return 0; 35 }
阶乘计算,高精度
1 #include <cstdio> 2 #include <string> 3 #include <cstring> 4 #include <cstdlib> 5 using namespace std; 6 const int MAXN=5000; 7 char buf[MAXN]; 8 struct BigData{ 9 int a[MAXN],cnt; 10 void init(int c){cnt=c,memset(a,0,sizeof(a));} 11 void Print(){for(int i=cnt;i>=1;i--)putchar(a[i]+‘0‘);puts("");} 12 void ReadInt(int x){ 13 memset(buf,0,sizeof(buf)); 14 itoa(x,buf+1,10); 15 init(strlen(buf+1)); 16 for(int i=1;i<=cnt;i++)a[cnt-i+1]=buf[i]-‘0‘; 17 } 18 }; 19 BigData Mul(BigData A,BigData B){ 20 BigData C;C.init(0); 21 for(int i=1;i<=A.cnt;i++) 22 for(int j=1;j<=B.cnt;j++){ 23 C.a[i+j-1]+=A.a[i]*B.a[j]; 24 C.a[i+j]+=C.a[i+j-1]/10; 25 C.a[i+j-1]%=10; 26 } 27 C.cnt=A.cnt+B.cnt-1; 28 if(C.a[C.cnt+1]>=1)C.cnt++; 29 while(C.a[C.cnt]==0&&C.cnt>1)C.cnt--; 30 return C; 31 } 32 BigData Ans,A; 33 int main(){ 34 Ans.init(1),Ans.a[1]=1; 35 int n;scanf("%d",&n); 36 for(int i=1;i<=n;i++)A.ReadInt(i),Ans=Mul(Ans,A); 37 Ans.Print(); 38 return 0; 39 }
原文:https://www.cnblogs.com/JasonCow/p/12374675.html