完整的解答如下,我以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;
}
}
作業六題目
回到作業目錄
回到首頁
沒有留言:
張貼留言