大数加减法
大数乘法和除法还不会,怎么弄带浮点数的大数乘除法大数加法
#include <stdio.h>
#define N 100
main()
{
int i,j,k,l;
char a1[N]={0},a2[N]={0},sum[N]={0};
scanf("%s %s",a1,a2);
for(i=0;a1[i];i++); //i移动字符串末尾
for(j=0;a2[j];j++);
for(k=N-2;i>0;k--,i--) //a1字符串平移到末尾
{
a1[k]=a1[i-1];
a1[i-1]=0;
}
for(k=N-2;j>0;k--,j--)
{
a2[k]=a2[j-1];
a2[j-1]=0;
}
for(l=N-2;a1[l]!=0&&a2[l]!=0;l--) //处理加法算式上下都有数字的和结果
{
sum[l]+=a1[l]+a2[l]-'0';
sum[l-1]=(sum[l]-'0')>9?1:0;
if(sum[l-1]==1)
sum[l]-=10;
}
while(a1[l]!=0||a2[l]!=0) //处理只有一边(只有上面有或只有下面有)有数字的和结果
{
sum[l]+=a1[l]+a2[l];
l--;
}
for(i=0;!sum[i];i++);//打印结果
printf("%s",&sum[i]);
}
大数减法
#include <stdio.h>
#include <string.h>
#define N 100
int sub(char a1[],char a2[],char diff[]) //减法子函数
{
int l;
for(l=N-2;a2[l];l--) //处理上下都有数的减法结果
{
diff[l]+=a1[l]-a2[l]+10+'0';
diff[l-1]=diff[l]>'9'?0:-1;
if(diff[l-1]==0)diff[l]-=10;
}
for(;a1[l];l--) //处理只有上面有数的减法结果
{
if(diff[l]==-1)diff[l]=a1[l]-1;
else
diff[l]=a1[l];
}
return diff[l+1]==0?l+1:l; 返回结果前一项的下标
main()
{
int i,j,k,flag=0,cy;
char a1[N]={0},a2[N]={0},diff[N]={0};
scanf("%s %s",a1,a2);
for(i=0;a1[i];i++);
for(j=0;a2[j];j++);
if(i>j)flag=1; //比较出两数大小,flag=1表示a1大,flag=2表示a2大,flag=3表示相等;
else if(i<j)flag=2;
else if(strcmp(a1,a2)>0)flag=1;
else if(strcmp(a1,a2)<0)flag=2;
else flag=3;
for(k=N-2;i>0;k--,i--)//数据移到末尾对齐
{
a1[k]=a1[i-1];
a1[i-1]=0;
}
for(k=N-2;j>0;k--,j--)
{
a2[k]=a2[j-1];
a2[j-1]=0;
}
if(flag==1)
{
sub(a1,a2,diff);
}
else if(flag==2)
{
cy=sub(a2,a1,diff);
diff[cy]='-';
}
else if(flag==3)diff[N-2]='0';
for(i=0;!diff[i];i++);
printf("%s",&diff[i]);
}
[此贴子已经被作者于2019-7-30 20:29编辑过]