1.超大整数的相加:
字符数组存储输入超大整数,然后把超大整数每个位上的元素逆向存入整形数组,用一个变量存储进位数,直接开始对位相加,然后逆向输出。
#include<stdio.h>
#include<string.h>
int main()
{
int a[2000]={0},b[2000]={0},c[4000]={0};
char s1[2000],s2[2000];
printf("please enter your two digit to add\n");
scanf("%s",s1);
scanf("%s",s2);
//输入
int l1=strlen(s1);
int l2=strlen(s2);
//长度
for(int i=0;i<l1;i++)a[l1-i]=s1[i]-'0';
for(int i=0;i<l2;i++)b[l2-i]=s2[i]-'0';
//换成整数计算
int w=0;int i;
for(i=1;i<=l1||i<=l2;i++){
int tt;
if(i>l1)tt=b[i]+w;
else if(i>l2)tt=a[i]+w;
else tt=a[i]+b[i]+w;
c[i]=tt%10;
w=tt/10;
}
c[i]=w;
while(c[i]==0&&i>=1){
i--;
}
//清零
while(i>=1){printf("%d",c[i]);i--;}
return 0;
}
2.超大整数的相乘
字符数组存储输入超大整数,然后把超大整数每个位上的元素逆向存入整形数组,然后两个for循环依次相乘按照乘法的规律,然后逆向输出
#include<stdio.h>
#include<string.h>
int main(){
int a[2001],b[2001],c[4002];
char s1[2001],s2[2021];
printf("please enter the digit\n");
scanf("%s",s1);
scanf("%s",s2);
int l1=strlen(s1),l2=strlen(s2);
for(int i=0;i<l1;i++)a[l1-i]=s1[i]-'0';
for(int i=0;i<l2;i++)b[l2-i]=s2[i]-'0';
for(int i=1;i<=l1;i++){
for(int j=1;j<=l2;j++){
int t=a[i]*b[j];
c[i+j-1]+=t%10;
c[i+j]=t/10;
c[i+j-1]%=10;
}
}
int tt=l1+l2;
while(c[tt]==0&&tt>=1){
tt--;
}
while(tt>=1){
printf("%d",c[tt]);tt--;
}
return 0;
}