两个整型大数相减
发布时间:2020-12-14 03:54:10 所属栏目:大数据 来源:网络整理
导读:/************************************************************************//*两个整型大数加减题目: 求两个100位数以内的加法 不含100位。分析:由于数据类型的溢出。所以不能使用基本的数据类型。应该使用字符串来表示。两个最大99位相减,有正负之分输
/************************************************************************/ /* 两个整型大数加减 题目: 求两个100位数以内的加法 不含100位。 分析:由于数据类型的溢出。所以不能使用基本的数据类型。应该使用字符串来 表示。 两个最大99位相减,有正负之分 输入: 6,9 结果应为 -3 */ /************************************************************************/ #include <stdio.h> #include <string.h> #define LEN_100 100 char *nizhi(char *p) //字符数组的逆置 { int len=strlen(p); for(int i=0;i<len/2;++i) //注意最后的一个NULL不要算 { char ctemp=p[i]; p[i]=p[len-i-1]; p[len-i-1]=ctemp; } return p; } /*函数: bignumasub 输入:字符数组a,字符数组b 输出:字符数组sub 返回:字符数组sub 分析: 两个大数相减, 1.求出 max min. 确定结果是为 正数or负数 用 uflag=1 正数 2.求出长度 控制 位减法的次数。 3. max,min整型数组求取 字符数组到整型数组 4. 位相减 lendbit sub[i] */ // >0 大于 <0 小于 ==0 相等 int numcmp(const char *a,const char *b) { int lena=strlen(a); int lenb=strlen(b); if(lena>lenb) return 1; else { if(lena<lenb) return -1; else return strcmp(a,b); } } char *bignumsub(const char *a,const char *b,char *sub) { char max[LEN_100]={0}; char min[LEN_100]={0}; int lena=strlen(a); int lenb=strlen(b); int uflag=0; //结果 正负 标志位 1为负 //比较大小 字符数组变为 Int数组 if(numcmp(a,b)>=0) //比较 大小 a>=b { for(int i=0;i<lena;i++) //字符串数组变为 int数组 max[i]=a[lena-i-1]-'0'; for(int i=0;i<lenb;i++) min[i]=b[lenb-i-1]-'0'; } else // b大 { for(int i=0;i<lenb;i++) //字符串数组变为 int数组 max[i]=b[lenb-i-1]-'0'; for(int i=0;i<lena;i++) min[i]=a[lena-i-1]-'0'; uflag=1; //负数标志 } //位 相减 int lendbit=0; //借位 int i=0; for(;i<lena || i<lenb;i++) { sub[i]=max[i]-min[i]-lendbit+'0'; if(sub[i]-'0'<0) //sub[i]>0 { sub[i]+=10; lendbit=1; //有借位 } else { lendbit=0; //无借位 } } if(0==sub[i-1]-'0') //如果末尾 为int 0 { if(uflag) sub[i-1]='-'; //直接用-号 覆盖 else sub[i-1]=0; } else { if(uflag) sub[i]='-'; } return sub; } void main() { while(1) { char a[LEN_100]={0};//初始化 最多99位 最多需要100位来存 char b[LEN_100]={0}; //两个存储字符数组 char sub[LEN_100]={0}; printf("输入被减数a:n"); gets(a); printf("输入减数b:n"); gets(b); printf("差为:n%sn",nizhi(bignumsub(a,b,sub))); } } /* 错误: 使用strcmp去比较两个数字字符串 其规则为从第一个不相等的字符按照ASCII码比较 需重新写一个数字字符串比较函数 */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |