大数减法

来源:互联网 发布:ubuntu搜狗输入法异常 编辑:程序博客网 时间:2024/05/29 15:28

大数减法


计算出前面那个大数减去后面那个大数的差;


1;刚搞清了大数加法,现在让我们来敲出大数减法。打出了大数加法的,相信都对数组这方面已经有点熟悉了吧。然而我们不能骄傲,这方面我们才开始起航,现在我们再接再厉敲出大数减法吧;


2;大数减法其实与大数加法是十分类似的,只有两点不同。

(1;是判断什么时候输出负号。

(2;怎么向前面借1;(这点相当于加法的进位)


3;输出负号;两种情况,第一种就是刚开始换边了,说明后面那个大数要远远大于前面的那个,则要输出负号。第二种就是两个数组长度相同时,最后跳出计算后还借了一个1,则表示为负数,要输出负号。


4;怎么借1,其实就可以相当于加法一样,只是这里换成了减;

wsc = (a[i]-'0')-(b[j]-'0')-jws;


怎么表示借1后的情况呢;

      if(wsc < 0){

            jws = 1;

            wsc = 10+wsc;}

         else{

            jws = 0;}


是不是很相同,这里可以比较一下大数相加和大数相减的不同;


大数相加;wsh =(a[i]-'0')+(b[j]-'0')+jzs;

         if(wsh > 9){

         jzs = 1;wsh = wsh%10;}

         else jzs = 0;

 

大数相减;wsc =(a[i]-'0')-(b[j]-'0')-jws;

         if(wsc < 0){

         jws = 1;wsc = 10+wsc;}

         else{jws = 0;}

         还有就是相减要考虑负号的情况;


可以摆代码了,

//输入两个正的大数,输出前一个减后一个的结果;

#include<stdio.h>

#include<string.h>

int main()

{

   int n, i, j, lena, lenb, m, jws, wsc,sz[1000],l, flag;

   char a[1000], b[1000], t[1000];

   scanf("%d",&n);

   while(n--){

      flag = 0;

      scanf("%s",a);

      scanf("%s",b);

      lena = strlen(a);

      lenb = strlen(b);

      if(lena < lenb){//换边。将长的放在前面;

         flag = 1;

         printf("-");

         strcpy(t, b);

         strcpy(b, a);

         strcpy(a, t);

         m = lenb;

         lenb = lena;

         lena = m;

      }

      jws = 0;

      l = 0;

      for(i = lena-1, j = lenb-1; j != -1; i--, j--){//计算公共部分。也就是数组短的那部分

         wsc = (a[i]-'0')-(b[j]-'0')-jws;

      // printf("%d\n",wsc);

         if(wsc < 0){

            jws = 1;

            wsc = 10+wsc;

         }

         else{

            jws = 0;

         }

         sz[l] = wsc;

         l++;

      }

      for( ; i != -1; i--){//数组长的剩余的部分 

         wsc = (a[i]-'0'-jws);

         if(wsc < 0){

            jws = 1;

            wsc = 10+wsc;

         }

         else{

            jws = 0;

         }

         sz[l] = wsc;

         l++;

      }

      if(jws == 1){//判断负号的输出;

         if(flag == 0)

            printf("-");

      // wsc = 10+wsc;

      // sz[l] = wsc;

      // printf("%d\n",wsc);

      // l++;

      }

      for(l--; l != -1; l--){

         printf("%d",sz[l]);

      }

      printf("\n");

   }    

  

   return 0 ;

}

1 0
原创粉丝点击