概述
1.位数的确定:假设c用来保存大数据a与大数据b的差,那么c的长度len = max(lena,lenb)
2.进位处理:
if(a[i] < b[i])
{ a[i+1]--; a[i] = a[i] + 10; }
c[i] = a[i] - b[i];
3.判断数的大小
int compare(char s1[],char s2[]){
if(strlen(s1)>strlen(s2))
return 1;
if(strlen(s1)<strlen(s2))
return -1;
for(int i=strlen(s1)-1;i>=0;i--){
if(s1[i]>s2[i])
return 1;
if(s1[i]<s2[i])
return -1;
}
源码
#include <stdio.h>
#include <string.h>
#define Max 3000
void gminus(char s1[],char s2[]);
void compare(char s1[],char s2[]);
int max(int a,int b);
int main()
{
char s1[Max];
char s2[Max];
scanf("%s %s",s1,s2);
gminus(s1,s2);
}
void gminus(char s1[],char s2[]){
int flag;
int a[Max];
int b[Max];
int c[Max]={0};
int lena=strlen(s1);
for(int i;i<lena;i++)
a[i]=s1[lena-i-1]-'0';
int lenb=strlen(s2);
for(int i;i<lenb;i++)
b[i]=s2[lenb-i-1]-'0';
int len=max(lena,lenb);
flag=compare(s1,s2);
if(flag==0){
putchar('0');
}
if(flag==1){
for(int i=0;i<len;i++){
if(a[i]<b[i]){
a[i+1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
while(c[len-1]==0)
len--;
for(int i=len-1;i>=0;i--){
if(c[i]==0&&len>1)
len--;
else
break;
}
for(int i=len-1;i>=0;i--)
printf("%d",c[i]);
}
if(flag==-1){
for(int i=0;i<len;i++){
if(b[i]<a[i]){
b[i+1]--;
b[i]+=10;
}
c[i]=b[i]-a[i];
}
while(c[len-1]==0)
len--;
for(int i=len-1;i>=0;i--){
if(c[i]==0&&len>1)
len--;
else
break;
}
putchar('-');
for(int i=len-1;i>=0;i--)
printf("%d",c[i]);
}
}
void compare(char s1[],char s2[]){
if(strlen(s1)>strlen(s2))
return 1;
if(strlen(s1)<strlen(s2))
return -1;
for(int i=strlen(s1)-1;i>=0;i--){
if(s1[i]>s2[i])
return 1;
if(s1[i]<s2[i])
return -1;
}
return 0;
}
int max(int a,int b){
if(a>b)
return a;
else
return b;
}
以上代码仅供参考
最后
以上就是阔达白羊为你收集整理的C语言实现高精度(大位数)减法的全部内容,希望文章能够帮你解决C语言实现高精度(大位数)减法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复