Bootstrap

题目大乱炖(1)

计算2的N次方

#include<bits/stdc++.h>
using namespace std;
long long fac[100010]={1},cd=1;
int main() {
	int n;
	cin>>n;
	for(int j=1;j<=n;j++){
		int jw=0;
		for(int i=0;i<=cd-1;i++){
			int t=fac[i]*2+jw;
			fac[i]=t%10;
			jw=t/10;
		}
		if(jw!=0){
			fac[cd]=jw;
			cd++;
		}
	}
	for(int i=cd-1;i>=0;i--){
		cout<<fac[i];
	} 
	return 0;
}

求10000以内的阶乘

#include<bits/stdc++.h>
using namespace std;
long long fac[550000]={1},cd=1;
int main() {
	int n;
	cin>>n;
	for(int j=1;j<=n;j++){
		int jw=0;
		for(int i=0;i<=cd-1;i++){
			int t=fac[i]*j+jw;
			fac[i]=t%10;
			t=t/10;
			jw=t;
		}
		while(jw!=0){
			fac[cd]=jw%10;
			jw=jw/10;
			cd++;
		}
	}
	for(int i=cd-1;i>=0;i--){
		cout<<fac[i];
	} 
	return 0;
}

除以13

#include<bits/stdc++.h>
using namespace std;
int a[10010],c[10010];
int main() {
	string s;
	cin>>s;
	int len=s.size();
	for(int i=0;i<=len-1;i++){
		a[i]=s[i]-'0';
	}
	int y=0;
	for(int i=0;i<=len-1;i++){
		int t=y*10+a[i];
		c[i]=t/13;
		y=t%13;
	}	
	int k=0;
	while(c[k]==0&&k<len-1){
	    k++;
	}
	for(int i=k;i<=len-1;i++){
		cout<<c[i];
	}
	cout<<endl;
	cout<<y;
		return 0;
}

高精度数除以低精度数

#include<bits/stdc++.h>
using namespace std;
int a[10010],c[10010];
int main() {
	string s;
	cin>>s;
	int n;
	cin>>n;
	int len=s.size();
	for(int i=0;i<=len-1;i++){
		a[i]=s[i]-'0';
	}
	int y=0;
	for(int i=0;i<=len-1;i++){
		int t=y*10+a[i];
		c[i]=t/n;
		y=t%n;
	}	
	int k=0;
	while(c[k]==0&&k<len-1){
	    k++;
	}
	for(int i=k;i<=len-1;i++){
		cout<<(int)c[i];
	}
		return 0;
}

求A/B的高精度值(ab)

#include<bits/stdc++.h>
using namespace std;
int c[1000];
int main() {
	int a,b;
	cin>>a>>b;
	cout<<a<<"/"<<b<<"="<<(int)a/b<<".";
	int y=a%b;
	if(y==0){
		cout<<0;
		return 0;
	} 
	int cnt=0;
	for(int i=0;i<20;i++){
		cnt++;
		int t=y*10;
		c[i]=t/b;
		y=t%b;
		if(y==0){
			break;
		}
	}
	for(int i=0;i<=cnt-1;i++){
		cout<<c[i];
	} 
		return 0;
}

求A/B的高精度值

#include<bits/stdc++.h>
using namespace std;
int c[1000];
int main() {
	int a,b;
	cin>>a>>b;
	cout<<a<<"/"<<b<<"="<<(int)a/b<<".";
	int y=a%b;
	if(y==0){
		cout<<0;
		return 0;
	} 
	int cnt=0;
	for(int i=0;i<19;i++){
		int t=y*10;
		c[cnt++]=t/b;
		y=t%b;
		if(y==0){
			break;
		}
		
		}
       if(c[18]>=5){
		    c[17]++;
		   for(int i=17;i>=0;i--){
		       if(c[i]==10){
		           c[i]=0;
		           c[i-1]++;
		       }
	        }
	}	
	if(cnt==19){
	    cnt=18;
	}
	for(int i=0;i<=cnt-1;i++){
		cout<<c[i];
	}   

		return 0;
}

高精度数除低精度2

#include<iostream>
#include<string>
using namespace std;
int a[10010],c[10010];
int main() {
	string s;
	cin>>s;
	int b;
	cin>>b;
	if(b==0){
	    cout<<"Divisor is 0";
	    return 0;
	}
	int len=s.size();
	for(int i=0;i<=len-1;i++){
		a[i]=s[i]-'0';
	}
	int y=0;
	for(int i=0;i<=len-1;i++){
		int t=y*10+a[i];
		c[i]=t/b;
		y=t%b;
	}	
	int k=0;
	while(c[k]==0&&k<len-1){
	    k++;
	}
	for(int i=k;i<=len-1;i++){
		cout<<c[i];	
		
	}
	if(y==0){
		    cout<<",0";
		    return 0;
		}
		cout<<".";
		int cnt=0;
	for(int i=len;i<100;i++){
	    cnt=i;
		int t=y*10;
		c[i]=t/b;
		y=t%b;
		if(y==0){
		    break;
		}
	}	
	while(c[cnt]==0&&cnt>len-1){
	    cnt--;
	}
	for(int i=len;i<=cnt;i++){
	    cout<<c[i];
	   
	} 
	cout<<",";
    cout<<y;
		return 0;
}

阶乘和

#include<iostream>
#include<string>
using namespace std;
const int N=1e7+10;//给sum.fac数组赋初值(最大)
int sum[N],fac[N],len=1;
void jc(int x){	//求阶乘
		int jw=0;
		for(int i=1;i<=len;i++){
		    fac[i]=fac[i]*x+jw;
		    jw=fac[i]/10;
		    fac[i]=fac[i]%10;
		    if(i==len&&jw!=0){
		        len++;
		 }
	}
}
void qh(){//阶乘求和,存到sum数组里面
    int jw=0;
    for(int i=1;i<=len;i++){
        sum[i]=sum[i]+fac[i]+jw;
        jw=sum[i]/10;
        sum[i]=sum[i]%10;
    }
    if(jw>0){//最高位进位
        len++;
        sum[len]=jw;
    }
}
int main(){
    int n;
    cin>>n;
    fac[1]=1;
    for(int i=1;i<=n;i++){
        jc(i);
        qh();
    }
    for(int i=len;i>=1;i--){
        cout<<sum[i];
    }
    	return 0;
}

;