两个大数的加、减、乘、除、取余

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

char *add_together(char *a,char *b);//两数相加

char *subtract(char *a,char *b);//两数相减

char *divide(char *a,char *b,int d);//两数相除

char *multiplied(char *a,char *b);//两数相乘

bool contrast(char *a,char *b,int c);//检查a,b两个字符串的大小

void inspect_char_valid(char *a,char *b);//检查两个字符串是否有其他符号

void printf_char(char *a);//输出字符串

int main()

{

char a[1000],b[1000],c;

do

{

printf("请输入一个数:");

gets(a);

printf("请输入一个数:");

gets(b);

printf("请输入'+','-','*','/','%%'的任意一个符号:");

c=getchar();

switch (c)

{

case '+':printf("两数相加的结果是:");printf_char(add_together(a,b));break;

case '-':printf("两数相减的结果是:");printf_char(subtract(a,b));break;

case '*':printf("两数相乘的结果是:");printf_char(multiplied(a,b));break;

case '/':printf("两数相除的结果是:");printf_char(divide(a,b,20));break;

case '%':divide(a,b,0);printf("第一个数对第二个数取余的结果是:");printf_char(a);break;

default:printf("你输入的不是'+','-','*','/','%'其中的符号\n退出!!!\n");

}

getchar();

}

while (c=='+' || c=='-' || c=='*' || c=='/' || c=='%');

return 0;

}

char *add_together(char *a,char *b)//两数相加

{

inspect_char_valid(a,b);

int i,j,c_len,sum,Carry=0;

char c[1000]={'\0'};

if (strlen(a)>strlen(b))

c_len=(int)strlen(a);

else

c_len=(int)strlen(b);

for (i=0;i

{

sum=Carry;

if (((int)strlen(a)-i)>0)

sum=sum+a[strlen(a)-1-i]-'0';

if (((int)strlen(b)-i)>0)

sum=sum+b[strlen(b)-1-i]-'0';

if (sum<10)

{

c[c_len-1-i]=sum+'0';

Carry=0;

}

else

{

c[c_len-1-i]=(sum%10)+'0';

Carry=sum/10;

}

}

if(Carry)

{

for (j=strlen(c);j>0;j--)

{

c[j]=c[j-1];

}

c[0]=Carry+'0';

Carry=0;

}

return c;

}

char *subtract(char *a,char *b)//两数相减

{

inspect_char_valid(a,b);

char c[1000]={'\0'};

int i,j,a_len,b_len,h,sum,borrow=0;

for (i=0;*(a+i)=='0';i++);

for (j=0;*(b+j)=='0';j++);

a_len=(int)strlen(a);

b_len=(int)strlen(b);

if ((a_len-i)<(b_len-j)||((a_len-i)==(b_len-j)&&contrast(b,a,1))) {

c[0]='-';

strcpy(c+1,b);

for (h=0;h

{

if ((a_len-h)>0)

if ((b[b_len-1-h]+borrow)>=a[a_len-1-h])

{

c[b_len-h-j]=b[b_len-1-h]+borrow-(a[a_len-1-h]-'0');

borrow=0;

}

else

{

c[b_len-h-j]=b[b_len-1-h]+borrow+10-(a[a_len-1-h]-'0');

borrow=-1;

}

else

{

if ((borrow+c[b_len-h-j]-'0')<0)

{

c[b_len-h-j]=c[b_len-h-j]+10+borrow;

borrow=-1;

}

else

{

c[b_len-h-j]=c[b_len-h-j]+borrow;

borrow=0;

}

}

}

}

else

{

strcpy(c,a);

for (h=0;h

{

if ((b_len-h)>0)

if ((a[a_len-1-h]+borrow)>=b[b_len-1-h])

{

c[a_len-1-h]=a[a_len-1-h]+borrow-(b[b_len-1-h]-'0');

borrow=0;

}

else

{

c[a_len-1-h]=a[a_len-1-h]+borrow+10-(b[b_len-1-h]-'0');

borrow=-1;

}

else

相关文档
最新文档