✔ 最佳答案
class 不是這般濫用的!
2009-11-22 23:20:54 補充:
看到提問者可能陷入比得了H1N1更暈的情境,
實在不忍心,遂提一帖解藥,盼能及時給你清心醒腦。
阿彌陀佛,善哉!善哉!
這應是想做模擬大數加法吧!
題目所提示的,是用一個位數的陣列來模擬,雖簡易,但效率較差。
本想改成四位數的陣列來開處方,但恐提問者一時不能意會,故作罷,
先以能救命為第一考量,故仍以題目的一個位數方式來處斷。
題目的A陣列,姑且叫它被加數,此例為10個位數,
B陣列為加數,同為10個位數。
由於累加後的結果可能會變成11位數,故A,B,C陣列皆設為11個元素。
又因陣列每一元素僅存一個位數,故用char 已夠用。
A[0]是最高位,A[SIZE-1]是個位。
為了力求簡易,故主程式在最後顯示結果時,不考慮前導零的問題
(本例不會發生,但其他應用時可能會碰到)
盼提問者能先就簡單的情境完全理解後,再求增益其日臻完備,才是學習之道。
示範程式如下,是大數加法最基礎的樣子,請參考,盼能有所裨益。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 11
void nAdd(char *a, char *b, char *c, int len);
int main()
{
char A[SIZE] = {0,1,2,3,4,5,6,7,8,9,0}; //被加數
char B[SIZE] = {0,9,8,7,6,5,3,2,1,0,0}; //加數
char C[SIZE] = {0};//和
int i;
nAdd(A, B, C, SIZE); //呼叫大數加法函式
for (i = 0; i < SIZE; ++i) //由最高位起印出每個位數的值
printf("%d", C[i]);
printf("\n");
system("pause");
return 0;
}
void nAdd(char *a, char *b, char *c, int len) {
int i, carry = 0;//carry是進位
for(i = len - 1; i >= 0; --i) //從個位數加起
{
c[i] = a[i] + b[i] + carry;
if(c[i] < 10) //結果小於10,不用進位
carry = 0;
else { // 結果大於10,留其個位數,並設進位為1進位
c[i] = c[i] - 10;
carry = 1;
}
}
}