两个大数的加、减、乘、除、取余
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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