高精度算法
C++虽然支持数据的运算,但是它的计算空间仍有范围,如果遇到1000位甚至及其位数以上的运算,就大大超出了C++所能提供的数据范围,这时就需要利用字符数组来保存数据,并根据数学上的运算规则对数据进行运算处理:
##1.高精度加法
#include<bits/stdc++.h>
using namespace std;
char sa[1010],sb[1010];
int i,la,lb,lc,a[1010],b[1010],c[1010];
int main(){
scanf("%s",&sa);
scanf("%s",&sb);
memset(a,0,sizeof(a));// 初始化为0;
memset(b,0,sizeof(b));
la=strlen(sa);lb=strlen(sb);
for(i=0;i<la;i++)
a[la-i-1]=sa[i]-'0';
for(i=0;i<lb;i++)
b[lb-i-1]=sb[i]-'0';
lc=max(la,lb);
memset(c,0,sizeof(c));
for(i=0;i<lc;i++){
c[i]=a[i]+b[i]+c[i];
if(c[i]>=10){//如果某位数字大于10,进位处理
c[i+1]++;
c[i]-=10;
}
}
if(c[lc]>0) lc++;//处理最高位数
for(i=lc-1;i>=0;i--) printf("%d",c[i]);// 逆向输出数据
return 0;
}
##2.高精度乘法
#include<bits/stdc++.h>
using namespace std;
char sa[101],sb[101];
int a[101],b[101],c[10100],la,lb,lc, i,j,jw=0,tmp,w;
int main(){
scanf("%s%s",&sa,&sb);
la=strlen(sa);lb=strlen(sb);
lc=la+lb;
//memset(a,0,sizeof(a));memset(b,0,sizeof(b));
for(i=0;i<la;i++)
a[la-i-1]=sa[i]-'0';
for(i=0;i<lb;i++)
b[lb-i-1]=sb[i]-'0';
memset(c,0,sizeof(c));//进行字符数组转整形数组操作,将保存结果的数组初始化为0;
for(i=0;i<la;i++)//将每一次的运算递推一位
for(j=0;j<lb;j++){
tmp =a[i]*b[j];
w =i+j;
jw =tmp/10;
tmp %=10;
c[w] += tmp;
c[w+1] += jw+c[w]/10;//处理进位
c[w] %= 10;//处理本位
}
while(c[lc]==0) lc--;
if(lc<0) printf("0/n");
else for(i=lc;i>=0;i--) printf("%d",c[i]);
return 0;
}
##3.高精度除法(保留小数后100位)
#include<cstdio>
int a[102],b[102],c[102];
int main(){
int num1,num2,y;
scanf("%d%d",&num1,&num2);
a[0]=num1/num2;b[0]=num1%num2;
printf("%d",a[0]);
if(b[0]) putchar('.');
for(int i=1;i<=100;i++){
if(b[i-1]==0) break;
a[i]=b[i-1]*10;
c[i]=a[i]/num2;
printf("%d",c[i]);
b[i]=a[i]%num2;
}
return 0;
}
##4.高精度模运算
#include<bits/stdc++.h>
using namespace std;
char a[1010];
int n[1010],k,i,j,num,la ,b[1010];
int main(){
scanf("%d%s",&k,&a);
la=strlen(a);
memset(n,0,sizeof(n));
for(i=0;i<la;i++){
n[i+1]=a[i]-'0';
}//字符转数字
for(i=1;i<=la;i++){
while(k>n[i]){
if(i==la) break;
n[i+1]+=n[i]*10;//进位处理
i++;
}
b[i]=n[i]%k;
if(i==la){
if(b[i]==0) printf("%d",k);
else printf("%d",b[i]);
}
else
n[i+1]=b[i]*10+n[i+1];
}
return 0;
}
此外,Java和Python都比较适合处理大数据,但如果遇到上百万位的数据规模就没办法了,这时需要用到一种特殊算法,待补充
评论