代碼展示: http://paste.ubuntu.com/23693598/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char * largeDiffer(char *a,char *b){
/* 使用說明
傳入的a和b只能為整數
結果為a-b;返回的為字符指針,注意數組不要越界 ,要加頭文件string.h
*/
int a_num[1000]={0},b_num[1000]={0};
char result[1000];//返回的結果
int a_len,b_len,i,j,cmp=-1,len,differ;
a_len=strlen(a);//計算a,b的長度
b_len=strlen(b);
for(i=0;i<a_len;i++){
a_num[a_len-i-1]=a[i]-'0';//給a倒敘賦值
}
for(i=0;i<b_len;i++){
b_num[b_len-i-1]=b[i]-'0';//給a倒敘賦值
}
if(a_len>b_len) cmp=1;//a大於b返回1 否則,返回-1
else if(a_len<b_len) cmp=-1;
else cmp=strcmp(a,b);
len=a_len>b_len?a_len:b_len;//返回較大值
if(cmp==1){//a為 大數的時候
for(i=0;i<len;i++){
if(a_num[i]<b_num[i]){
a_num[i]+=10;
if(a_num[i]<0){
a_num[i]=9;
a_num[i+1]=a_num[i+1]-1;
}
a_num[i+1]=a_num[i+1]-1;
differ=a_num[i]-b_num[i];
a_num[i]=differ;
}else{
differ=a_num[i]-b_num[i];
a_num[i]=differ;
}
}
} else if(cmp==-1){//第一個輸入的為小數的時候
for(i=0;i<len;i++){
if(b_num[i]<a_num[i]){
b_num[i]+=10;
if(b_num[i]<0){
b_num[i]=9;
b_num[i+1]=b_num[i+1]-1;
}
b_num[i+1]=b_num[i+1]-1;
differ=b_num[i]-a_num[i];
a_num[i]=differ;//
}else{
differ=b_num[i]-a_num[i];
a_num[i]=differ;//
}
}
}
//輸出格式
i=len-1;
while(a_num[i]==0) i--;//直到第一個不為0的數
if(cmp==-1) {
result[0]='-';
for(j=1;i>=0;i--,j++)
result[j]=a_num[i]+'0';
result[j]='\0';
} else{
for(j=0;i>=0;i--,j++)
result[j]=a_num[i]+'0';
result[j]='\0';
}
return result;
}
int main(){
char a[1000],b[1000];
gets(a);
gets(b);
char result[1000];
strcpy(result,largeDiffer(a,b));
printf("%s",result);
}
編程愛好者 248351598