计算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;
}