现在的位置: 首页 > 综合 > 正文

大数减法

2014年01月03日 ⁄ 综合 ⁄ 共 1347字 ⁄ 字号 评论关闭

#include<stdio.h>
#include<string.h>
#define maxn 1010

int cmp(char *s1, char *s2){
 while(s1[0]=='0' && strlen(s1)!=1)
  strcpy(s1,s1+1);
 
 while(s2[0]=='0' && strlen(s2)!=1)
  strcpy(s2, s2+1);
  
 int Len1 = strlen(s1), Len2 = strlen(s2), i, j, flag = 0, k;
 
  if(Len1 == Len2 && strcmp(s1, s2)==0)
   return 0;
 else if(Len1 > Len2)
  return 1;
 else if(Len1 < Len2)
  return -1;
 else if(Len1 == Len2){
  if(s1[0] > s2[0])
   return 1;
  else if(s1[0] < s2[0])
   return -1;
  else {
   for(i = 1; i < Len1; i++){
    if(s1[i] != s2[i])
     flag = 1;
     k = i;
     break;
   }
   if(!flag)
    return 0;
   else if(flag && s1[k] > s2[k])
    return 1;
   else if(flag && s1[k] < s2[k])
    return -1;
  }
 }
}

void sub(int *a, int *b, int len1){
 int i, j;
 for(i=0;i<len1;i++)
  {
    a[i]=a[i]-b[i];
    if(a[i]<0)
    {
     a[i]+=10;
       a[i+1]--;
        }
    }
 
   i=len1-1;
   while(a[i]==0)
    {
     i--;
    }
    for(j=i;j>=0;j--)
    {
     printf("%d",a[j]);
    }
    printf("\n");
}

int main()
{
    char s1[maxn],s2[maxn];
    while(scanf("%s%s",s1,s2)!=EOF)
    {
        int i,j,len1,len2;
        int a[105]={0},b[105]={0};
        len1=strlen(s1);
        len2=strlen(s2);
        for(i=len1-1,j=0;i>=0;i--,j++)
        {
            a[j]=s1[i]-48;
        }
        for(i=len2-1,j=0;i>=0;i--,j++)
        {
            b[j]=s2[i]-48;
        }
       
        if(cmp(s1, s2)==0)
         printf("0\n");
        else if(cmp(s1, s2)==1)
         sub(a, b, len1);
    else if(cmp(s1, s2)==-1)
     sub(b, a, len2);
    }
    return 0;
}

抱歉!评论已关闭.