大数运算(2)——大数加法
生活随笔
收集整理的這篇文章主要介紹了
大数运算(2)——大数加法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*大數加法的中心思想就是:模擬人工列豎式算加法的方法。先從最低位開始相加,判斷是否進1,一直到最高位。
例如:
求12545642233+278545的和,該怎么算?
是這樣的:
? ? ?3 ?3 ?2 ?2 ?4 ?6 ?5 ?4 ?5 ?2 ?1 ?0
+ ?2 ?7 ?8 ?5 ? 4 ?5 ?0 ?0 ?0 ?0 ?0 ?0
————————————————
? ? 5 ? ?//不進位,繼續算下一位
? ? ? ? ?0 ? ?//進位為1,并儲存其各位數0
? ? ? ? ? ? ?1 ? //2+8=10,10+1=11,同樣,進位為1,并儲存其各位數1
? ? ? ? ? ? ? ? ? 8 ? //不進位,繼續算下一位
————————>
由低位向高位相加計算,注意判斷是否進位!計算結束后,注意判斷最后所得數組的長度,并去掉前導0。
下面是C語言代碼實現: #include<stdio.h> #include<string.h> int x[100]={0},y[100]={0},z[105]={0};//將數組元素全部初始化為0 int main() { char a[100],b[100];//通過字符串對大數進行輸入并儲存 int len1,len2,len; while(scanf("%s %s",a,b)) { int i,j=0,k=0; len1=strlen(a); len2=strlen(b); for(i=len1-1;i>=0;i--)//將兩個字符串中的字符轉化為數字,并倒序儲存到數組中,即字符串為123456,則數組為654321 { x[j]=a[i]-'0'; j++; } for(i=len2-1;i>=0;i--) { y[k]=b[i]-'0'; k++; } if(len1>len2) len=len1; else len=len2; i=0;//從最低位(個位)開始進行計算 int m=0; for(i=0;i<len;i++) { z[i]=(x[i]+y[i]+m)%10;//將所得數的個位存到數組z[i]中去 if((x[i]+y[i]+m)>=10) m=1; else m=0; } if((x[i-1]+y[i-1]+m)>=10)//判斷運算的最大位的和是否>=10 z[i]=1; else i=i-1; for(;i>=0;i--)//到序輸出數組 printf("%d",z[i]); printf("\n"); } return 0; }
另外:
有時,你可能會遇到大數,但他是小數,例如125454521564564.56456132145645這樣的,所以可以以小數點為界限,進行相加減。*/
例如:
求12545642233+278545的和,該怎么算?
是這樣的:
? ? ?3 ?3 ?2 ?2 ?4 ?6 ?5 ?4 ?5 ?2 ?1 ?0
+ ?2 ?7 ?8 ?5 ? 4 ?5 ?0 ?0 ?0 ?0 ?0 ?0
————————————————
? ? 5 ? ?//不進位,繼續算下一位
? ? ? ? ?0 ? ?//進位為1,并儲存其各位數0
? ? ? ? ? ? ?1 ? //2+8=10,10+1=11,同樣,進位為1,并儲存其各位數1
? ? ? ? ? ? ? ? ? 8 ? //不進位,繼續算下一位
————————>
由低位向高位相加計算,注意判斷是否進位!計算結束后,注意判斷最后所得數組的長度,并去掉前導0。
下面是C語言代碼實現: #include<stdio.h> #include<string.h> int x[100]={0},y[100]={0},z[105]={0};//將數組元素全部初始化為0 int main() { char a[100],b[100];//通過字符串對大數進行輸入并儲存 int len1,len2,len; while(scanf("%s %s",a,b)) { int i,j=0,k=0; len1=strlen(a); len2=strlen(b); for(i=len1-1;i>=0;i--)//將兩個字符串中的字符轉化為數字,并倒序儲存到數組中,即字符串為123456,則數組為654321 { x[j]=a[i]-'0'; j++; } for(i=len2-1;i>=0;i--) { y[k]=b[i]-'0'; k++; } if(len1>len2) len=len1; else len=len2; i=0;//從最低位(個位)開始進行計算 int m=0; for(i=0;i<len;i++) { z[i]=(x[i]+y[i]+m)%10;//將所得數的個位存到數組z[i]中去 if((x[i]+y[i]+m)>=10) m=1; else m=0; } if((x[i-1]+y[i-1]+m)>=10)//判斷運算的最大位的和是否>=10 z[i]=1; else i=i-1; for(;i>=0;i--)//到序輸出數組 printf("%d",z[i]); printf("\n"); } return 0; }
另外:
有時,你可能會遇到大數,但他是小數,例如125454521564564.56456132145645這樣的,所以可以以小數點為界限,進行相加減。*/
總結
以上是生活随笔為你收集整理的大数运算(2)——大数加法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么选择springcloud
- 下一篇: 大数运算(3)——大数减法