终于写好高精了,太开心了
2023-07-25 19:22:45
发布于:浙江
高精度:
高精度计算中需要处理好以下几个问题:
(1)数组的接收方法和存储方法
当输入的数很长时,可采用字符串方式输入。
string s;
cin>>s;
len=s.length();
for(int i=0;i<len;i++){
a[i]=s[len-i-1]-'0';
}
(2)高精度数位数的确定
接收时往往是用字符串的,所以它的位数就等于字符串的长度。
(3)进位、借位处理
加法进位:
c[i]+=a[i]+b[i];
if(c[i]>=10){
c[i]%=10;
c[i+1];
}
减法借位:
if(a[i]<b[i]){
--a[i+1];
a[i]+=10;
}
c[i]=a[i]-b[i];
乘法进位:
c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
x=c[i+j-1]/10;
c[i+j-1]%=10;
高精加:
#include<bits/stdc.h>
using namespace std;
int a[101],b[101],c[101];
int main(){
string s,k;
cin>>s>>k;
int len1=s.length();
int len2=k.length();
for(int i=0;i<len1;i++){
a[i]=s[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
b[i]=k[len2-i-1]-'0';
}
int len=max(len1,len2);
for(int i=0;i<len;i++){
c[i]=a[i]+b[i]+c[i];
if(c[i]>=10){
c[i]%=10;
c[i+1];
}
}
for(int i=len;i>=0;i--){
if(c[i] || i!=len)
cout<<c[i];
}
return 0;
}
高精减:
#include<bits/stdc.h>
using namespace std;
int a[255],b[255],c[255];
bool cmp(string s1,string s2){
if(s1.size()<s2.size()) return true;
else if(s1.size()>s2.size()) return false;
else{
if(s1<s2) return true;
else return false;
}
}
int main(){
string s,k;
cin>>s>>k;
if(cmp(s,k)){
cout<<"-";
swap(s,k);
}
int len1=s.length();
int len2=k.length();
for(int i=0;i<len1;i++){
a[i]=s[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
b[i]=k[len2-i-1]-'0';
}
int len=len1;
for(int i=0;i<len;i++){
if(a[i]<b[i]){
--a[i+1];
a[i]+=10;
}
c[i]=a[i]-b[i];
}
int f=1;
for(int i=len-1;i>=0;i--){
if(c[i]!=0)
f=0;
if(c[i]!=0 || f==0)
cout<<c[i];
}
if(f){
cout<<0;
}
return 0;
}
高精乘
#include<bits/stdc++.h>
using namespace std;
int a[1000001],b[1000001],c[1000001];
int main(){
string s,k;
cin>>s>>k;
int len1=s.length();
int len2=k.length();
if(s=="0" || k=="0"){
cout<<0;
return 0;
}
for(int i=0;i<len1;i++){
a[i]=s[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
b[i]=k[len2-i-1]-'0';
}
for(int i=0;i<len1;i++){
for(int j=0;j<len2;j++){
c[i+j]+=a[i]*b[j];
if(c[i+j]>=10){
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
}
}
int len3=len1+len2;
while(c[len3]==0 && len3>1){
len3--;
}
for(int i=len3;i>=0;i--)
cout<<c[i];
return 0;
}
全部评论 1
高精阶乘没有,差评(doge)
2023-07-31 来自 浙江
0
有帮助,赞一个