首页 > 编程语言 > 详细

大数四则运算之减法运算-----c语言版

时间:2017-02-18 15:20:21      阅读:240      评论:0      收藏:0      [点我收藏+]

/*
分三种情况:
1.减数长度大于被减数
交换减数与被减数,输出负号,方便减
2.减数长度等于被减数(分三种情况)
a.减数大于被减数,类似1情况1
b.减数等于被减数,两数相等,直接输出0,完成。
c.减数小于被减数
3.减数长度小于被减数
*/

#include<stdio.h>
#include<string.h>
int main(){
char ch1[1000],ch2[1000];
int num1[1000],num2[1000],num[1000];
int i,j,flag1=1,max,flag2=0;
scanf("%s",ch1);
scanf("%s",ch2);
max=strlen(ch1);
if(strlen(ch1)<strlen(ch2)){//减数长度大于被减数,必定为负数
flag1=-1;
max=strlen(ch2);
printf("-");
}
if(strlen(ch1)==strlen(ch2))
flag1=0;//确定输入数字的长度比较结果。便于采用合理的运算方式
for(i=0;i<max;i++){//初始化
num[i]=0;
num1[i]=0;
num2[i]=0;
}
for(i=strlen(ch1)-1,j=0;i>=0;i--)
num1[j++]=ch1[i]-‘0‘;//将字符数组元素所对应数字存入整形数组
for(i=strlen(ch2)-1,j=0;i>=0;i--)
num2[j++]=ch2[i]-‘0‘;
//分情况对数字进行减法运算
if(flag1==1){//第三种情况
for(i=0;i<strlen(ch1);i++){
num[i]=num1[i]-num2[i];
if(num[i]<0){
num[i]+=10;
num1[i+1]--;
}
}
}
else if(flag1==0){//第二种情况
for(i=strlen(ch1)-1;i<=0;i--){//循环结束的情况有两种 1.ch1[i]!=ch2[i] 2.遍历完数组中所有元素
if(ch1[i]!=ch2[i])
break;
}
if(ch1[i]>ch2[i]){//ch1[i]>ch2[i],自然相减
for(i=0;i<strlen(ch1);i++){
num[i]=num1[i]-num2[i];
if(num[i]<0){
num[i]+=10;
num1[i+1]--;
}
}
}
else if(ch1[i]==ch2[i]){//相等为0
printf("0");
}
else{//输出负号,交换减数被减数
printf("-");
for(i=0;i<strlen(ch1);i++){
num[i]=num2[i]-num1[i];
if(num[i]<0){
num[i]+=10;
num2[i+1]--;
}
}
}
}

else{//第一种情况
for(i=0;i<strlen(ch2);i++){
num[i]=num2[i]-num1[i];
if(num[i]<0){
num[i]+=10;
num2[i+1]--;
}
}
}
for(i=max;i>=0;i--){
if(num[i]<=0&&flag2==0)
continue;
flag2=1;
printf("%d",num[i]);
}
return 0;

}

大数四则运算之减法运算-----c语言版

原文:http://www.cnblogs.com/lin0/p/6413113.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!