2008年3月22日 星期六

C 程式設計作業六,陣列與字串之使用:解題

這題的C語言作業雖然是要做乘法,但是被乘數只有兩位數,所以,最簡單的作法是用加法來完成。也就是讀進來的第一個字串去累加,累加的次數由讀入的第二個數字決定。
完整的解答如下,我以add(prod, temp)函數呼叫來完成加法,使用addOn來處理進位。另外讀進來的數字字串最高位數是在str[0]的位置,所以轉成temp時要顛倒過來。digitNo是用來計算答案的位數,列印時前置的0才可以不用印出來。

#include <stdio.h>
#include <stdlib.h>

#define MSIZE 34

void multiply(int prod[], int multiplier[], int num);
void add(int prod[], int temp[]);
int main(void)
{
int prod[MSIZE], temp[MSIZE];
char str[MSIZE];
int i, num, digitNo;

while (1)
{
scanf("%s%d", str, &num);
if (!strcmp(str,"0") && num==0)
break;
for (i=0;i<MSIZE;i++)
{
prod[i]=0;
temp[i]=0;
}
for (i=strlen(str)-1;i>=0;i--)
temp[strlen(str)-i-1] = str[i]-48;
/*
for (i=strlen(str)-1;i>=0;i--)
printf("%d",temp[i]);
printf("\n");
*/
for (i=0;i<num;i++)
add(prod, temp);
digitNo = 0;
for (i=MSIZE-1;i>=0;i--)
if (prod[i]!=0)
{
digitNo = i;
break;
}
for (i=digitNo;i>=0;i--)
printf("%d",prod[i]);
printf("\n");
}


return 0;
}

void add(int prod[], int temp[])
{
int addOn=0, i;
for (i=0;i<MSIZE;i++)
{
prod[i] = prod[i]+temp[i] + addOn;
if (prod[i]>9)
{
prod[i] %= 10;
addOn = 1;
}
else
addOn = 0;
}
}

作業六題目
回到作業目錄
回到首頁

沒有留言: