高精度計算—-加法運算

來源:互聯網
上載者:User

處理大數加法:

 1.用數組來儲存每位元,對每位元進行相加運算,要依加法原則,從低位開始運算。而數組是從高位開始儲存的,所以要逆序處理運算。要處理進位和當前位超9處理。

 2.這裡的加法運算不包括負數計算,可以轉換為相關的減法運算。

測試程式效果如下:

一下程式碼封裝含相加函數,測試的主函數,相加函數(附帶注釋)直接可以使用:

#include "stdio.h"<br />#include "stdlib.h"<br />#include "string.h"<br />/************************************************************************/<br />/* 高精度加法運算*/<br />/* a[]被加數,位元不限*/<br />/* b[]加數,位元不限*/<br />/* back[]結果,字串儲存 */<br />/************************************************************************/<br />void add(char a[],char b[],char back[])<br />{<br />int i,j,k,up,x,y,z,l;<br />char *c;//儲存結果的逆數組<br />if (strlen(a)>strlen(b))//判斷位元哪個更大嗎,取較長的位元,以防進位要多補一位和結束符<br />{<br />l=strlen(a)+2;<br />}<br />else<br />{<br />l=strlen(b)+2;<br />}<br />c=(char *)malloc(l*sizeof(char));//動態開闢char類型l長度的字串<br />i=strlen(a)-1;//取實際長度<br />j=strlen(b)-1;<br />k=0;up=0;//k是c數組的下標,up代表進位標誌<br />while (i>=0 || j>=0)<br />{<br />if (i<0)//當被加數位元過少的話,用0前補不足<br />{<br />x='0';<br />}<br />else<br />{<br />x=a[i];<br />}<br />if (j<0)//當加數位元過少的話,用0前補不足<br />{<br />y='0';<br />}<br />else<br />{<br />y=b[j];<br />}<br />z=x-'0'+y-'0';//加法運算<br />if (up)//對上一次的進位處理<br />{<br />z+=1;<br />}<br />if (z>9)//超9處理<br />{<br />up=1;<br />z%=10;<br />}<br />else<br />{<br />up=0;<br />}<br />c[k++]=z+'0';//存入c數組<br />i--;<br />j--;<br />}<br />if (up)//末次進位情況<br />{<br />c[k++]='1';<br />}<br />c[k]='/0';//結束符<br />for (k-=1,i=0;k>=0;k--)//數組逆序賦給back結果數組<br />{<br />back[i++]=c[k];<br />}<br />back[i]='/0';<br />}</p><p>int main()<br />{<br />int n;<br />char a[1000],b[1000],c[1000];<br />printf("%s","計算次數: ");<br />scanf("%d",&n);<br />while (n--)<br />{<br />memset(a,'/0',sizeof(a));<br />memset(b,'/0',sizeof(b));<br />memset(c,'/0',sizeof(c));<br />printf("%s","請輸入被加數: ");<br />scanf("%s",&a);<br />printf("%s","請輸入加數: ");<br />scanf("%s",&b);<br />add(a,b,c);<br />printf("%s%s/n/n","加法後結果為: ",c);<br />}<br />return 0;<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.