日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数运算(3)——大数减法

發(fā)布時間:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数运算(3)——大数减法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大數(shù)的減法與大數(shù)加法的方法有相似之處的,都是模擬人工運算的,從最低位開始運算,一直到最高位。

其方法是:

首先,要判斷減數(shù)和被減數(shù)哪一個位數(shù)長,減數(shù)位數(shù)長是正常減;被減數(shù)位數(shù)長,則被減數(shù)減減數(shù),最后還要加上負號;兩數(shù)位數(shù)長度相等時,最好比較一下哪一個數(shù)字大,否則負號處理會很繁瑣,用大的減去小的,最后加上負號;

其次,處理每一項時要,如果前一位相減有借位,就先減去上一位的借位,無則不減;再去判斷是否能夠減開被減數(shù),如果減不開,就要借位后再去減,同時置借位為1,否則置借位為0。

結果可能會出現(xiàn)前面是一堆0的情況,要處理好,如當減數(shù)為112,而被減數(shù)為111時,會出現(xiàn)001 ,這時,需要將前面的0刪除。

例如:13154-21213(同樣,從最低位開始相減)

? ?3 ?2 ?1 ?2 ?2

- 4 ?5 ?1 ?3 ?1

————————

? 9 ? ?//向前一位借1,則前一位的2變?yōu)?

? ? ? 6 ? ?// 2---->1向前一位借1,則前一位的1變?yōu)?

? ? ? ? ? 9 ? ?//1---->0向前一位借1,則前一位的2變?yōu)?

? ? ? ? ? ? ? 8 ? ? ?//2---->1向前一位借1,則前一位的2變?yōu)?

? ? ? ? ? ? ? ? ? ?0 ? ?//不用借位。

? 9 ?6 ?9 ?8 ?0 ? ? ?//當然,輸出時將0刪除,并加上負號,即-9896

下面是C語言代碼實現(xiàn):

#include<stdio.h> #include<string.h> int x[100]={0},y[100]={0},z[105]={0};//將數(shù)組元素全部初始化為0 void sub(int x[],int y[],int len) { int i,j; for(i=0;i<len;i++) { if(x[i]>=y[i])//如果x[i]>=y[i],不用向前一位借1,可直接減 z[i]=x[i]-y[i]; else //如果x[i]<y[i],向前一位借1,同時前一位應減1 { z[i]=x[i]+10-y[i]; x[i+1]=x[i+1]-1; } } for(i=len-1;i>0;i--)//刪除前綴0 { if(z[i]==0) len--; else break; } for(i=len-1;i>=0;i--) //倒序輸出數(shù)組 printf("%d",z[i]); printf("\n"); } int main() { char a[100],b[100];//通過字符串對大數(shù)進行輸入并儲存 int len1,len2; while(scanf("%s %s",a,b)) { int i,j=0,k=0; len1=strlen(a); len2=strlen(b); for(i=len1-1,j=0;i>=0;i--)//將兩個字符串中的字符轉化為數(shù)字,并倒序儲存到數(shù)組中,即字符串為123456,則數(shù)組為654321 x[j++]=a[i]-'0'; for(i=len2-1,k=0;i>=0;i--) y[k++]=b[i]-'0'; if(len1>len2) //若減數(shù)長度 > 被減數(shù),正常減 sub(x,y,len1); else if(len1<len2) //若減數(shù)長度 < 被減數(shù),被減數(shù) 減 減數(shù) { printf("-"); sub(y,x,len2); } else //若減數(shù)長度 == 被減數(shù),判斷兩個數(shù)的大小 { for(i=len1-1;i>=0;i--)//判斷每一位兩個數(shù)的大小 { if(x[i]==y[i]) continue; if(x[i]>y[i])//即減數(shù)大 { sub(x,y,len1); break; } if(x[i]<y[i])//即被減數(shù)大 { printf("-"); sub(y,x,len1); break; } } } } return 0; }

總結

以上是生活随笔為你收集整理的大数运算(3)——大数减法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。