大数相加
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 30
char* bigNumberSum(char numA[N],char numB[N]){
int i,j,tmp,tag=0;
int maxL;
int lenA=strlen(numA),lenB=strlen(numB);
int arrA[N]={0},arrB[N]={0};
int tmpRes[N]={0};
char *res;
res=(char*)malloc(N*sizeof(char));
maxL=lenA>lenB?lenA:lenB;
for(i=0;i<lenA;i++){
arrA[i]=numA[lenA-1-i]-'0';
}
for(i=0;i<lenB;i++){
arrB[i]=numB[lenB-1-i]-'0';
}
for(i=0;i<maxL+1;i++){
tmp=tmpRes[i];
tmp+=arrA[i];
tmp+=arrB[i];
if(tmp>=10){
tmp=tmp-10;
tmpRes[i+1]=1;
}
tmpRes[i]=tmp;
}
for(i=maxL+1-1,j=0;i>=0;i--){
if(!tag){
if(tmpRes[i]==0)
continue;
tag=1;
}
res[j++]=tmpRes[i]+'0';
}
res[j]='\0';
return res;
}
int main(){
char *res;
res=bigNumberSum("426709752318","95481253129");
printf("大数相加的结果为:%s\n",res);
return 0;
}
大数相乘
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 30
char* bigNumberMultiply(char numA[N],char numB[N]){
int i,j,tag=0;
int lenA=strlen(numA),lenB=strlen(numB);
int arrA[N]={0},arrB[N]={0};
int tmpRes[N]={0};
char *res;
res=(char*)malloc(N*sizeof(char));
for(i=0;i<lenA;i++){
arrA[i]=numA[lenA-1-i]-'0';
}
for(i=0;i<lenB;i++){
arrB[i]=numB[lenB-1-i]-'0';
}
for(i=0;i<lenB;i++){
for(j=0;j<lenA;j++){
tmpRes[i+j]+=arrB[i]*arrA[j];
if(tmpRes[i+j]>=10){
tmpRes[i+j+1]+=tmpRes[i+j]/10;
tmpRes[i+j]=tmpRes[i+j]%10;
}
}
}
for(i=lenB+lenA-1,j=0;i>=0;i--){
if(!tag){
if(tmpRes[i]==0)
continue;
tag=1;
}
res[j++]=tmpRes[i]+'0';
}
res[j]='\0';
return res;
}
int main(){
char *res;
res=bigNumberMultiply("93281","2034");
printf("大数相乘的结果为:%s\n",res);
return 0;
}