C语言 求任意大的两整数之差(数组存储)
【设计思想】将两个大整数分别用两个字符型数组a和 b来表示,每个数字以其字符形式存放在数组中,进行求差之前,先判断两数的大小,保证被减数的值大于减数的值,然后对两数按照从右向左的顺序进行数字字符的相减,求得其差值放在字符数组c中。
话不多说,见代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
//编写-程序用于计算任意大的两整数之差(提示:大整数用字符串来表示)
void SubNumberStr(char *a,int len1,char *b,int len2,char *c);//主要功能函数
char SubChar(char ch1,char ch2);//两数相减,标记借位
void LeftTrim(char *str,char sign);//去掉字符串左边的空格和0
int tag=0;
int main()
{
char a[SIZE]={0},b[SIZE]={0},sum[SIZE+1];
int len1,len2;
gets(a);
gets(b);
len1=strlen(a),len2=strlen(b);
//计算
SubNumberStr(a,len1,b,len2,sum);
printf("%s\n",sum);
}
void LeftTrim(char *str,char sign){
int i;
for(i=0;str[i]==' ' || str[i]=='0';i++);
if(str[i]=='\0') i--;
if(sign=='-') str[--i]=sign;
strcpy(str,str+i);
}
void SubNumberStr(char *a,int len1,char *b,int len2,char *sum){
char t[SIZE],sign=' ';
int i,j,k;
if((len1<len2) || (len1==len2)&&(strcmp(a,b)<0))
{
sign='-';
strcpy(t,a);
strcpy(a,b);
strcpy(b,t);
}
memset(sum,' ',SIZE);
i=len1-1;
j=len2-1;
k=SIZE;
while(i>=0 && j>=0){
sum[k--]=SubChar(a[i--],b[j--]);
}
while(i>=0){
sum[k--]=SubChar(a[i--],'0');
}
sum[SIZE+1]='\0';
LeftTrim(sum,sign);
}
char SubChar(char ch1,char ch2){
char ch;
ch=ch1-ch2-tag;
if(ch>=0){
tag=0;
return ch+0x30;
}
else{
tag=1;
return ch+10+0x30;
}
}
运行结果: