当前位置 博文首页 > pzjdsg666的博客:C++:高精度算法
#include<bits/stdc++.h>
using namespace std;
int compare(string str1,string str2){
if(str1.length()>str2.length())
return 1;
else if(str1.length()<str2.length())
return -1;
else return str1.compare(str2);
}
string add(string str1,string str2){
string str;
int len1=str1.length(),len2=str2.length();
if(len1<len2){
for(int i=1;i<=len2-len1;i++)
str1="0"+str1;
} else{
for(int i=1;i<=len1-len2;i++)
str2="0"+str2;
}
len1=str1.length();
int cf=0,temp;
for(int i=len1-1;i>=0;i--){
temp=str1[i]-'0'+str2[i]-'0'+cf;
cf=temp/10;
temp%=10;
str=char(temp+'0')+str;
}
if(cf!=0)
str=char(cf+'0')+str;
return str;
}
string str1,str2;
int main(){
cin>>str1>>str2;
cout<<add(str1,str2)<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int compare(string s1,string s2){
if(s1.length()>s2.length())
return 0;
if(s1.length()<s2.length())
return 1;
for(int i=0;i<=s1.length();i++){
if(s1[i]>s2[i])
return 0;
if(s1[i]<s2[i])
return 1;
}
return 0;
}
string str1,str2;
int a[250],b[250],i;
int main(){
cin>>str1>>str2;
a[0]=str1.length();
for(i=1;i<=a[0];i++)
a[i]=str1[a[0]-i]-'0';
b[0]=str2.length();
for(i=1;i<=b[0];i++)
b[i]=str2[b[0]-i]-'0';
if((compare(str1,str2))==0){
for(i=1;i<=a[0];i++){
a[i]-=b[i];
if(a[i]<0) {
a[i+1]--;
a[i]+=10;
}
}
a[0]++;
while((a[a[0]]==0)&&(a[0]>1))
a[0]--;
for(i=a[0];i>=1;i--)
cout<<a[i];
cout<<endl;
}else{
cout<<'-';
for(i=1;i<=b[0];i++){
b[i]-=a[i];
if(b[i]<0){
b[i+1]--;
b[i]+=10;
}
}
b[0]++;
while((b[b[0]]==0)&&(b[0]>1))
b[0]--;
for(i=b[0];i>=1;i--)
cout<<b[i];
cout<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
string str1,str2;
int a[250],b[250],c[500],len,i,j;
int main(){
cin>>str1>>str2;
a[0]=str1.length();
for(i=1;i<=a[0];i++)
a[i]=str1[a[0]-i]-'0';
b[0]=str2.length();
for(i=1;i<=b[0];i++)
b[i]=str2[b[0]-i]-'0';
for(i=1;i<=a[0];i++){
for(j=1;j<=b[0];j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
len=a[0]+b[0]+1;
while((c[len]==0)&&(len>1))
len--;
for(i=len;i>=1;i--)
cout<<c[i];
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[100],b[100],c[100];
int compare(int a[],int b[]){
int i;
if(a[0]>b[0])
return 1;
if(a[0]<b[0])
return -1;
for(i=a[0];i>0;i--){
if(a[i]>b[i])
return 1;
if(a[i]<b[i])
return -1;
}
return 0;
}
void subduction(int a[],int b[]){
int flag,i;
flag=compare(a,b);
if(flag==0){
a[0]=0;
return;
}
if(flag==1){
for(i=1;i<=a[0];i++){
if(a[i]<b[i]){
a[i+1]--;
a[i]+=10;
}
a[i]-=b[i];
}
while(a[0]>0&&a[a[0]]==0)
a[0]--;
return;
}
}
char str1[100],str2[100];
int i,j;
int main(){
cin>>str1>>str2;
a[0]=strlen(str1),b[0]=strlen(str2);
for(i=1;i<=a[0];i++)
a[i]=str1[a[0]-i]-'0';
for(i=1;i<=b[0];i++)
b[i]=str2[b[0]-i]-'0';
int temp[100];
c[0]=a[0]-b[0]+1;
for(i=c[0];i>0;i--){
memset(temp,0,sizeof(temp));
for(j=1;j<=b[0];j++)
temp[j+i-1]=b[j];
temp[0]=b[0]+i-1;
while(compare(a,temp)>=0){
c[i]++;
subduction(a,temp);
}
}
while(c[0]>0&&c[c[0]]==0)
c[0]--;
if(c[0]==0)
cout<<0<<endl;
else{
for(i=c[0];i>0;i--)
cout<<c[i];
cout<<endl;
}
return 0;
}