大整数运算大整数运算
#include
#include
#define N 1000
int fenge(char str[],int d[])//从右端开始每四位转换成一个四位整数存入d[N-1,N-2...j],函数返回最高位下标j
{
int i,j,len=strlen(str);
for(i=0;i=0;i=i-4) //从右端开始每四位转换成一个四位整数存入d[j]
d[j--]=(str[i]-48)+(str[i-1]-48)*10+(str[i-2]-48)*100+(str[i-3]-48)*10...
大整数运算
#include
#include
#define N 1000
int fenge(char str[],int d[])//从右端开始每四位转换成一个四位整数存入d[N-1,N-2...j],数返回最高位下标j
{
int i,j,len=strlen(str);
for(i=0;i=0;i=i-4) //从右端开始每四位转换成一个四位整数存入d[j]
d[j--]=(str[i]-48)+(str[i-1]-48)*10+(str[i-2]-48)*100+(str[i-3]-48)*1000;
//处理左端不足四位的情况
if(i==0)
d[j--]=str[i]-48;
else if(i==1)
d[j--]=(str[i]-48)*10+str[i-1]-48;
else if(i==2)
d[j--]=(str[i]-48)*100+(str[i-1]-48)*10+(str[i]-48);
return j+1;
}
void dtos(int d[],int k,char str[]) {
//将整型数组c转化为字符串s
int i;
char tempstr[10];
sprintf(str,"%d",d[k]); //把最高位转化为字符串赋给s,因为最高位不用补0
for(i=k+1;i=k;i--)
{
x=a[i]+b[i]+y;
c[i]=x%10000;
y=x/10000;
}
//若最高位有进位
if(y>0)
{
k--;
c[k]=y;
}
//将整型数组c转化为字符串s
dtos(c,k,s);
}
void sub(char s1[],char s2[],char s[])//求s1-s2的差存入s {
int a[N],b[N],c[N],k1,k2,k,len1,len2;
int i,flag=1;
char str[N];
len1=strlen(s1);len2=strlen(s2);
if(strlen(s1)==0) //被减数为0
{
strcpy(s,"-");
strcat(s,s2);
return;
}
if(strlen(s2)==0) //减数为0
{
strcpy(s,s1);
return;
}
if(len1=k1;i--)
{
if(a[i]=k2;i--)//让b[i](i=N-1,...k2)乘以a然后错位累加
{
//b[i]乘以a的结果暂存d中
k3=i;
y=0; //y为进位
for(j=N-1;j>=k1;j--)
{
x=(long)b[i]*a[j]+y;
d[k3--]=x%10000;
y=x/10000;
}
if(y>0)d[k3--]=y; //若最高位有进位
k3++;
//将d累加在c中
y=0;
for(j=i;j>=k3;j--) //因为错位,第i位是b[i]乘a的最低位,不要写成j从N-1
开始
{
x=c[j]+d[j]+y;
c[j]=x%10000;
y=x/10000;
}
if(y>0)
{
k3--;
c[k3]=y;
}
}
//将整型数组c转化为字符串s
dtos(c,k3,s);
}
int main()
{
char s1[N],s2[N],s[N];
scanf("%s%s",s1,s2);
add(s1,s2,s);
printf("%s\n",s);
sub(s1,s2,s);
printf("%s\n",s);
mul(s1,s2,s);
printf("%s\n",s);
return 0;
}
本文档为【大整数运算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。