其實,高精度解題就是一個思路,把他變爲數組,因爲數組可表示很大的一個數據。
但在高精度代碼的書寫過程之中,最主要的就是考慮到進位丟失的問題。這個問題就是說當兩個數相加的時候大於等於10的時候,按照我們常規算法是需要往前 進一。廢話不多說,代碼附上。代碼並不多,只是重複的代碼有一部分而已
#include<stdio.h>
#include<string.h>
char a[100000000];
char b[100000000];
int f[100000000];
int n,sum=0;
int main(){
scanf("%s %s",a,b);
int len1=strlen(a);
int len2=strlen(b);
memset(f,0,sizeof(f));
if(len1>len2){
n=len1-len2;
for(int i=len2;i>=0;i--){
b[i+n]=b[i];
b[i]='0';
}
for(int i=0;i<len1;i++)
printf("%c",b[i]);
printf("\n");
for(int i=len1-1;i>=0;i--){
f[i]=f[i]+(a[i]-'0')+(b[i]-'0');
if(f[i]/10!=0){
f[i]%=10;
if(i==0)
b[0]=1;
else
f[i-1]=1;
}
}
if(sum!=0){
printf("%d",sum);
for(int i=0;i<len1;i++){
printf("%d",f[i]);
}
}
else{
for(int i=0;i<len1;i++){
printf("%d",f[i]);
}
}
}
else if(len1<len2){
n=len2-len1;
for(int i=len1;i>=0;i--){
a[i+n]=a[i];
a[i]='0';
}
for(int i=0;i<len2;i++)
printf("%c",a[i]);
printf("\n");
for(int i=len2-1;i>=0;i--){
f[i]=f[i]+(a[i]-'0')+(b[i]-'0');
if(f[i]/10!=0){
f[i]%=10;
if(i==0)
sum=1;
else
f[i-1]=1;
}
}
if(sum!=0){
printf("%d",sum);
for(int i=0;i<len1;i++){
printf("%d",f[i]);
}
}
else{
for(int i=0;i<len2;i++){
printf("%d",f[i]);
}
}
}
else{
n=0;
for(int i=len2-1;i>=0;i--){
f[i]=f[i]+(a[i]-'0')+(b[i]-'0');
if(f[i]/10!=0){
f[i]%=10;
if(i==0)
sum=1;
else
f[i-1]=1;
}
}
if(sum!=0){
printf("%d",sum);
for(int i=0;i<len1;i++){
printf("%d",f[i]);
}
}
else{
for(int i=0;i<len2;i++){
printf("%d",f[i]);
}
}
}
return 0;
}