大數相減(兩個字串的相減的結果)

2021-09-14 08:34:59 字數 1484 閱讀 4411

把長度小,數值小的值作為減數,然後取反加入到被減數中,遍歷被減數,遇到負數就加10,同時前一位減1

#include#include#define max 1000    // 大數的最大位數  /*

大數減法 

引數: 

num1為被減數,用字元陣列儲存

num2為減數 

sum陣列儲存相減的結果   即:num1-num2=sum

返回值:返回陣列sum的有效長度,即計算結果的位數 

*/int subtraction(char num1, char num2, int sum)

;    int len1 = strlen(num1); // 計算陣列num1的長度,即大數的位數 

int len2 = strlen(num2); // 計算陣列num2的長度,即大數的位數

// 在進行減法之前要進行一些預處理 

blag = 0; // 為0表示結果是正整數,為1表示結果是負整數 

if(len1 < len2) // 如果被減數字數小於減數

else if(len1 ==len2) // 如果被減數的位數等於減數的位數

else} }

len = len1>len2 ? len1 : len2; // 獲取較大的位數

//將num1字元陣列的數字轉換為整型數且逆向儲存在整型陣列sum中,即低位在前,高位在後

for (i = len1-1, j = 0; i >= 0; i--, j++) 

sum[j] = num1[i] - '0';

// 轉換第二個數 

for (i = len2-1, j = 0; i >= 0; i--, j++)

n2[j] = num2[i] - '0';

// 將兩個大數相減 

for (i = 0; i <= len; i++)

}// 計算結果長度 

for (i = len1-1; i>=0 && sum[i] == 0; i--)

return len;   // 返回結果的位數 

}int main()

; // 存放計算的結果,低位在前,高位在後,即sum[0]是低位 

char num1 = "987654321987654321"; // 第乙個大數 

char num2 = "123456789123456789"; // 第二個大數 

len = subtraction(num1, num2, sum);    // 兩數相減 

// 輸出結果

printf("%s\n  -\n%s\n  =\n", num1, num2);

if(sum[i=len-1] < 0) // 根據高位是否是-1判斷是否是負數

for (; i >= 0; i--)

printf("%d", sum[i]);

printf("\n"); 

return 0;

}

連線兩個字串

include include void main char lianjie char a 30 char b 30 原型 extern char strcat char dest,char src 用法 include 功能 把src所指字串新增到dest結尾處 覆蓋dest結尾處的 0 並新增 ...

交換兩個字串

交換兩個字串,原來的字串分別為 學生 和 好 字串輸出顯示為 學生好 交換後輸出顯示為 好學生 include using namespace std int main char c1 5 學生 char c2 3 好 char m,n,t m c1 n c2 cout 交換前 m n n t co...

兩個字串相乘

先附上一張演算法圖 解釋 123 456 首先拿出1和456相乘,儲存到陣列1 2 3 的位置,然後拿出2和456相乘2 3 4的位置,依次類推,直到第乙個字串遍歷完 然後將他們相加,依次存到陣列中 實現如下 int j 0 int resindex 0 for int i 0 i然後再考慮進製,需...