用C++描述一段关于大整数的加减乘除运算
时间: 2023-06-08 19:08:32 浏览: 67
关于大整数的加减乘除运算,可以使用以下C语言代码进行描述:
```c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxn 1000
struct bign{ //定义结构体存储大整数
int d[maxn], len;
bign() //结构体初始化函数
{memset(d,0,sizeof(d)); len=0;}
};
bign change(char str[]) //将字符串转为大整数
{
bign res;
res.len=strlen(str);
for(int i=0;i<res.len;i++) res.d[i]=str[res.len-1-i]-'0';
return res;
}
int compare(bign a, bign b) //比较两个大整数的大小
{
if(a.len>b.len) return 1;
else if(a.len<b.len) return -1;
else
{
for(int i=a.len-1;i>=0;i--)
if(a.d[i]>b.d[i]) return 1;
else if(a.d[i]<b.d[i]) return -1;
return 0;
}
}
bign add(bign a, bign b) //大整数加法
{
bign c;
int carry=0;
for(int i=0;i<a.len || i<b.len;i++)
{
int sum=a.d[i]+b.d[i]+carry;
c.d[c.len++]=sum%10;
carry=sum/10;
}
if(carry) c.d[c.len++]=carry;
return c;
}
bign sub(bign a,bign b) //大整数减法
{
bign c;
for(int i=0,carry=0;i<a.len;i++)
{
int tmp=a.d[i]-carry-b.d[i];
if(tmp>=0) carry=0;
else
{
carry=1;
tmp+=10;
}
c.d[c.len++]=tmp;
}
while(c.len>1 && c.d[c.len-1]==0) c.len--;
return c;
}
bign mul(bign a, int b) //大整数与小整数的乘法
{
bign c;
int carry=0;
for(int i=0;i<a.len;i++)
{
int tmp=a.d[i]*b+carry;
c.d[c.len++]=tmp%10;
carry=tmp/10;
}
while(carry) //必须要判最高的一位有没有进位,否则漏了的话就少了一位
{
c.d[c.len++]=carry%10;
carry/=10;
}
return c;
}
bign mul(bign a, bign b) //大整数乘法
{
bign c;
c.len=a.len+b.len;
for(int i=0;i<a.len;i++)
for(int j=0;j<b.len;j++)
c.d[i+j]+=a.d[i]*b.d[j];
for(int i=0;i<c.len;i++)
{
c.d[i+1]+=c.d[i]/10; //进位处理
c.d[i]%=10;
}
while(c.len>1 && c.d[c.len-1]==0) c.len--;
return c;
}
bign divide(bign a, int b, int &r) //大整数除以小整数
{
bign c;
c.len=a.len;
for(int i=a.len-1;i>=0;i--)
{
r=r*10+a.d[i];
if(r<b) c.d[i]=0;
else
{
c.d[i]=r/b;
r=r%b;
}
}
while(c.len>1 && c.d[c.len-1]==0) c.len--;
return c;
}
char* BignToString(bign a) //大整数转为字符串
{
char* res=new char[maxn];
for(int i=0;i<a.len;i++)
res[i]=a.d[a.len-1-i]+'0';
res[a.len]='\0';
return res;
}
int main()
{
char str1[maxn], str2[maxn];
int a,b;
scanf("%s%s%d",str1,str2,&b);
bign A=change(str1),B=change(str2),C,D,E;
C=add(A,B);
D=sub(A,B);
E=mul(A,b);
int r=0;
C=divide(A,b,r);
printf("%s\n%s\n%s\n%s\n",BignToString(C),BignToString(D),BignToString(E),BignToString(C));
return 0;
}
```
在程序中,使用结构体bign存储大整数,通过定义加法、减法、乘法、除法等运算函数,实现了大整数的加减乘除运算。同时,还可以将大整数转为字符串输出,方便进行结果的输出和格式化。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)