昨天花了半天的时间研究大整数的加减乘除的运算问题,首先在网上找到了大整数加法的代码,感觉想法还比较容易理解的,依据这个想法在做除法就很容易了,几乎就是把加法的拷贝过来,再改几处就没问题了。然后做乘法,乘法和加法的思路有不同,有思路但是很不清晰,又去网上百度借鉴别人的思路,看懂了,把别人的思路敲进电脑里,编译运行没问题通过了。最后是除法,和乘法又有有很大不同的,看了别人的一些思路,没怎么懂,很多人的代码用C++写的,我对C++的语法不熟悉,目前比较依赖C,所以除法没做出来,就做了个加减乘组合在一起的程序,编译运行都正确,不过要求输入的第一个数要大于第二个数,另外我用的编译器是DEVC++,在别的编译器上是否能运行没有验证过。代码如下:
#include <stdio.h>
#include <string.h>
#define N 210
//主函数
int main()
{
int ADD(char str1[],char str2[]);
int MIN(char str1[],char str2[]);
int MUL(char str1[],char str2[]);
int counter,k;
char str1[N],str2[N];
printf("Please input the number of the testing group:\n");
scanf("%d",&counter);
for(k=0;k<counter;k++)
{
printf("Please input two large number:\n");
scanf("%s%s",str1,str2);
ADD(str1,str2);
MIN(str1,str2);
MUL(str1,str2);
}
system("pause");
}
//下谓构造函数加、减、乘
//此为大整数加法运算代码
void ADD(char str1[],char str2[])
{
int i,j,length1,length2,tag,tag1,n,m;
int num1[N],num2[N];
length1=strlen(str1);
length2=strlen(str2);
for(i=0;i<210;i++)
num1[i]=0;
for(i=0;i<210;i++)
num2[i]=0;
j=0;
for(i=length1-1;i>=0;i--)
{
num1[j]=str1[i]-'0';
j++;
}
j=0;
for(i=length2-1;i>=0;i--)
{
num2[j]=str2[i]-'0';
j++;
}
for(i=0;i<200;i++)
{
num1[i]+=num2[i];
if(num1[i]>=10)
{
num1[i]-=10;
num1[i+1]++;
}
}
for(i=209;i>=0;i--)
{
if(num1[i]!=0||num2[i]!=0)
{
tag=i;
break;
}
}
printf("The result of add is:\n");
for(i=tag;i>=0;i--)
{
printf("%d",num1[i]);
}
printf("\n");
return 0;
}
//此为大整数减法的代码
void MIN (char str1[],char str2[])
{
int n,m,length11,length22,tag1;
int num3[N],num4[N];
length11=strlen(str1);
length22=strlen(str2);
for(n=0;n<210;n++)
num3[n]=0;
for(n=0;n<210;n++)
num4[n]=0;
m=0;
for(n=length11-1;n>=0;n--)
{
num3[m]=str1[n]-'0';
m++;
}
m=0;
for(n=length22-1;n>=0;n--)
{
num4[m]=str2[n]-'0';
m++;
}
for(n=0;n<200;n++)
{
num3[n]-=num4[n];
if(num3[n]<0)
{
num3[n]+=10;
num3[n+1]--;
}
}
for(n=209;n>=0;n--)
{
if(num3[n]!=0||num4[n]!=0)
{
tag1=n;
break;
}
}
printf("The result of plus is \n");
for(n=tag1;n>=0;n--)
{
printf("%d",num3[n]);
}
printf("\n");
return 0;
}
//此为大整数乘法的代码
void MUL(char str1[],char str2[])
{
int p,q,length3,length4,tag2;
int num5[N],num6[N],num7[N];
length3=strlen(str1);
length4=strlen(str2);
for(p=0;p<N;p++)
{
num5[p]=0;
num6[p]=0;
num7[p]=0;
}
q=0;
for(p=length3-1;p>=0;p--)
{
num5[q]=str1[p]-'0';
q++;
}
q=0;
for(p=length4-1;p>=0;p--)
{
num6[q]=str2[p]-'0';
q++;
}
for(q=0;q<length4;q++)
for(p=0;p<length3;p++)
{
num7[p+q]+=num5[p]*num6[q];
while(num7[p+q]>=10)
{
num7[q+p]-=10;
num7[q+p+1]++;
}
}
for(p=N-1;p>=0;p--)
{
if(num7[p]!=0)
{
tag2=p;
break;
}
}
printf("The result of mul is: \n");
for(p=tag2;p>=0;p--)
{
printf("%d",num7[p]);
}
printf("\n\n");
return 0;
}