大数相减
发布时间:2020-12-14 04:07:22 所属栏目:大数据 来源:网络整理
导读:#include stdio.h#include malloc.h#include string.h#define N 100int main(){int i;bool flag = false;//判断结果是否为负数bool flag_0 = false;//判断前导0char s1[N],s2[N];printf("请输入被减数:n");scanf("%s",s1);printf("请输入减数:n");scanf("%
#include <stdio.h> #include <malloc.h> #include <string.h> #define N 100 int main() { int i; bool flag = false;//判断结果是否为负数 bool flag_0 = false;//判断前导0 char s1[N],s2[N]; printf("请输入被减数:n"); scanf("%s",s1); printf("请输入减数:n"); scanf("%s",s2); int len1 = strlen(s1); int len2 = strlen(s2); int len = (len1>len2 ? len1:len2)+1;//多出的1是为了添加'-' if(len1<len2 || len1==len2&&strcmp(s1,s2)<0)//如果被减数比减数长度小或者两者长度相同,但被减数值小于减数值,则结果为负数 flag = true; char *a = (char*)malloc(sizeof(char)*len1); char *b = (char*)malloc(sizeof(char)*len2); char *c = (char*)malloc(sizeof(char)*len); memset(c,len);//全置为0 for(i=0;i<len1;i++) a[i] = s1[len1-1-i]-'0';//a[0]是最低位 for(i=0;i<len2;i++) b[i] = s2[len2-1-i]-'0'; if(flag)//如果结果是负数 { for(i=0;i<len1;i++)//以被减数长度为判决条件,每一位用减数减去被减数 c[i]=b[i]-a[i]; for(i=len1;i<len2;i++)//剩下的位数用减数补齐 c[i]=b[i]; } else { for(i=0;i<len2;i++)//以减数长度作为判决条件,每一位用被减数去减减数 c[i]=a[i]-b[i]; for(i=len2;i<len1;i++)//剩下的位数用被减数补齐 c[i]=a[i]; } for(i=0;i<len;i++) { if(c[i]<0)//如果为负,则向上一位借1,上一位减1,自己加10 { c[i+1]--; c[i]+=10; } } printf("大数相减结果为:n"); if(flag)//如果结果是负数 { for(i=len-1;i>=0;i--) { if(flag_0) { c[i]+='0'; printf("%c",c[i]); } else if(c[i]!=0) { c[i+1] = '-';//第一个非0元素前面置负号 printf("%c",c[i+1]); c[i]+='0'; printf("%c",c[i]); flag_0 = true; } } } else//结果非负数 { for(i=len-1;i>=0;i--) { if(flag_0) { c[i]+='0'; printf("%c",c[i]); } else if(c[i]!=0) { c[i]+='0'; printf("%c",c[i]); flag_0 = true; } } } printf("n"); free(a); free(b); free(c); a=NULL; b=NULL; c=NULL; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |