將長整數儲存於一維陣列,長度為60位。
計算兩數的相加、相減。
輸入說明:
兩個小於60位數的數字
輸入範例:
74678186416540450856046456406565453745354346846
42541264516146186481412634534534535674461
輸出範例:
74678228957804967002232937819199988279890021307
74678143875275934709859974993930919210818672385
#include <stdio.h>
void math(int n1,int n2,char *num1,char *num2){
int i,j,tmp;
char *total;
if(n1>n2){
total=num1;
for(i=n1-1,j=n2-1;i>=0&&j>=0;i--,j--){
tmp=0;
tmp=(num1[i]-48)+(num2[j]-48);
if(tmp>9){
total[i]=tmp-10;
num1[i-1]=num1[i-1]+1;
}
else{
total[i]=tmp;
}
}
}
for(i=0;i<n1-n2;i++){
printf("%d",total[i]-48);
}
for(i=0+n1-n2;i<n1;i++){
printf("%d",total[i]);
}
/*for(i=0;i<n1;i++){
printf("%c",num1[i]);
}
printf("\n");
for(i=0;i<n2;i++){
printf("%c",num2[i]);
}*/
}
void reduce(int n1,int n2,char *num3,char *num4){
int i,j,tmp=0;
char *less=num3;
for(i=n1-1,j=n2-1;i>=0&&j>=0;i--,j--){
if(num3[i]<num4[j]){
num3[i-1]=num3[i-1]-1;
less[i]=(num3[i]+10-48)-(num4[j]-48);
}
else{
less[i]=(num3[i]-48)-(num4[j]-48);
}
}
for(i=0;i<n1-n2;i++){
printf("%d",less[i]-48);
}
for(i=0+n1-n2;i<n1;i++){
printf("%d",less[i]);
}
/*for(i=0;i<n1;i++){
printf("%c",num3[i]);
}
printf("\n");
for(i=0;i<n2;i++){
printf("%c",num4[i]);
}*/
}
int main(){
char num1[60]={0},num2[60]={0};
char num3[60]={0},num4[60]={0};
int i=0,n1=0,n2=0;
for(i=0;i<60;i++){
scanf("%c",&num1[i]);
num3[i]=num1[i];
n1++;
if(num1[i]=='\n'){
num1[i]=0;
n1--;
break;
}
}
for(i=0;i<60;i++){
scanf("%c",&num2[i]);
num4[i]=num2[i];
n2++;
if(num2[i]=='\n'){
num2[i]=0;
n2--;
break;
}
}
math(n1,n2,num1,num2);
printf("\n");
reduce(n1,n2,num3,num4);
return 0;
}