C語言實現大數相加(思路+程式碼+執行結果)
阿新 • • 發佈:2018-12-09
大數相加
思路:
1.先將字串倒序並轉換為數字
2.逐位相加,並存入一個數組e[i]中
3.將得到的結果進行進位處理
4.轉換並把陣列e[i]反轉,迴圈輸出結果
#include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<bits/stdc++.h> using namespace std; #define Max 1000 char a[Max],b[Max]; int c[Max],d[Max],e[Max]; int main() { int x=0; while(~scanf("%s%s",a,b)) { memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); memset(e,0,sizeof(e)); x++; int a1=strlen(a); int a2=strlen(b); int a3=a1-1; int a4=a2-1; //將字串倒序,將字元轉化為數字才能進行加法 for(int i=0; i<a1; i++) { c[a3]=(a[i]-48); //減個'0'就可以轉化了 a3--; } for(int i=0; i<a2; i++) { d[a4]=(b[i]-48); a4--; } int l=max(a1,a2); for(int i=0; i<l; i++) { //對兩組字串中的數逐位相加,存於e[i] e[i]+=(c[i]+d[i]); // 得到的結果進行進位制位處理 if(e[i]>=10) { e[i+1]++; e[i]=e[i]%10; } } printf("Case %d:\n",x); printf("%s + %s = ",a,b); if(e[l]!=0) printf("%d",e[l]); // 輸出結果 for(int i=l-1; i>=0; i--) { printf("%d",e[i]); } printf("\n"); } }