大整數加法(簡單演算法)
阿新 • • 發佈:2018-11-15
大整數加法首先要了解加法的演算法,具體思路很簡單:
從低位到高位開始加,需要進位,正向陣列是高位在前,所以需要反向陣列開始加法。
程式碼如下,寫的麻煩了一點:
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #define MAXD 100 int main() { char str1[MAXD], str2[MAXD]; int num1[MAXD], num2[MAXD]; while (1) { memset(str1, 0, sizeof(str1)); memset(str1, 0, sizeof(str2)); memset(num1, 0, sizeof(num1)); memset(num2, 0, sizeof(num2));//將這些陣列清零 scanf("%s", str1);//vs的輸入很奇怪... scanf("%s", str2); int len1, len2, i, j; len1 = strlen(str1); len2 = strlen(str2); j = 0; int maxl = len1>len2 ? len1 : len2; for (i = len1 - 1; i >= 0; i--) num1[j++] = str1[i] - '0';//陣列反向,按照加法的模式 j = 0; for (i = len2 - 1; i >= 0; i--) num2[j++] = str2[i] - '0'; for (i = 0; i<maxl; i++) { num2[i] += num1[i];//相加 if (num2[i] >= 10) { num2[i] -= 10; num2[i + 1] += 1;//產生進位,畢竟是int陣列很方便 } } if (num2[maxl]) printf("%d", num2[maxl]);//如果最高位是1,產生進位 for (i = maxl - 1; i >= 0; i--)//如果想要得到一個數就用char的陣列然後用atoi函式轉數字 printf("%d", num2[i]); } return 0;}