[問題] 大數的加法、乘法
不好意思 小妹不才
這週作業是要寫大數的加法、乘法
之前有問過人大概的演算法
寫完之後跑出來結果很奇怪
自己debug都無法
請幫幫我:(((
感謝~~~
..............程式碼如下................................
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ADD(char num1[], char num2[], char* ans, int l);
void MULTI(char num1[], char num2[], char* ans, int l1,int l2);
int main(void)
{ int i,l1,l2,l;
char num1[102];//="12482749527023981727342";
char num2[102];//="25827039852346435645321";
char operater;//='+';
char ans[202];
FILE* in = fopen("input.txt","r");
//讀檔失敗訊息
if(in==NULL)
printf("file opening error");
while(!feof(in))
{
//陣列初值化
for(i=0;i<102;i++)
{num1[i] = 0;
num2[i] = 0;
ans[i] = 0;
}
for(i=0;i<202;i++)
ans[i] = 0;
//flie inputing
fscanf(in,"%s %c%s",num1,&operater,num2);
//計算字串長度
l1 = strlen(num1);
l2 = strlen(num2);
if(l1>l2)
l = l1;
else
l = l2;
printf("%s %c %s = ",num1,operater,num2);
//將char型態換算成int型態
for(i=0;i<l1;i++)
num1[i]-= '0';
for(i=0;i<l2;i++)
num2[i]-= '0';
strrev(num1);
strrev(num2);
switch(operater)
{
case'+':
ADD(num1,num2,ans,l);
break;
case'*':
MULTI(num1,num2,ans,l1,l2);
break;
default:
printf("error");
}
strrev(ans);
for(i=0;i<strlen(ans);i++)
ans[i] += '0';
printf("%s\n",ans);
}
return 0;
}
void ADD(char num1[], char num2[], char* ans, int l)
{
int i;
for(i=0;i<l;i++)
{
ans[i] += num1[i] + num2[i];
if(ans[i]>9)
{ans[i]%=10;
ans[i+1]+=ans[i]/10;}
}
}
void MULTI(char num1[], char num2[], char* ans, int l1,int l2)
{int i,j;
for(i=0;i<l1;i++)
{for(j=0;j<l2;j++)
{ans[i+j]+=num1[i]*num2[j];
if(ans[i+j]>=10)
{ans[i+j+1] += ans[i+j]/10;
ans[i+j] %= 10;
}
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.4.191
→
12/13 18:35, , 1F
12/13 18:35, 1F
噓
12/13 18:40, , 2F
12/13 18:40, 2F
→
12/13 19:05, , 3F
12/13 19:05, 3F
→
12/13 20:36, , 4F
12/13 20:36, 4F
→
12/13 20:37, , 5F
12/13 20:37, 5F
→
12/13 20:49, , 6F
12/13 20:49, 6F
推
12/13 20:53, , 7F
12/13 20:53, 7F
→
12/13 20:59, , 8F
12/13 20:59, 8F
推
12/13 20:59, , 9F
12/13 20:59, 9F
→
12/13 21:03, , 10F
12/13 21:03, 10F
→
12/13 21:15, , 11F
12/13 21:15, 11F
推
12/13 21:23, , 12F
12/13 21:23, 12F
推
12/13 22:07, , 13F
12/13 22:07, 13F
推
12/14 03:37, , 14F
12/14 03:37, 14F
→
12/14 04:00, , 15F
12/14 04:00, 15F
→
12/14 04:01, , 16F
12/14 04:01, 16F
→
12/14 04:01, , 17F
12/14 04:01, 17F
→
12/14 18:46, , 18F
12/14 18:46, 18F
→
12/14 19:19, , 19F
12/14 19:19, 19F
→
12/15 22:26, , 20F
12/15 22:26, 20F