[問題] 大數的加法、乘法

看板C_and_CPP作者 (甜)時間13年前 (2010/12/13 18:25), 編輯推噓4(5114)
留言20則, 11人參與, 最新討論串1/1
不好意思 小妹不才 這週作業是要寫大數的加法、乘法 之前有問過人大概的演算法 寫完之後跑出來結果很奇怪 自己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
不好意思我實在不知道bugmens在噓什麼,問個問題謙稱
12/13 20:36, 4F

12/13 20:37, , 5F
小妹錯在哪...= =你有沒有認錯帳號阿...我鉤誰了= =
12/13 20:37, 5F

12/13 20:49, , 6F
板規2 除錯文務必清楚列出錯誤訊息
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
啊喲 140.112.4 不是資訊系的ip嗎(嚇哭
12/13 20:59, 9F

12/13 21:03, , 10F
112應該可以問學長?我記得某xxclxrk是judge神人級的。
12/13 21:03, 10F

12/13 21:15, , 11F
還是給提示好了,加法進位if裡寫的順序就不對了。
12/13 21:15, 11F

12/13 21:23, , 12F
關鍵字必推
12/13 21:23, 12F

12/13 22:07, , 13F
結果很奇怪就用 debug by test case
12/13 22:07, 13F

12/14 03:37, , 14F
加法裡面 你的型態都是char 怎麼能直接運算?
12/14 03:37, 14F

12/14 04:00, , 15F
樓上,他前面段已經有先扣除'0'了.
12/14 04:00, 15F

12/14 04:01, , 16F
不過我想她先扣'0'後才又調用strrev,這樣遇到0不會有
12/14 04:01, 16F

12/14 04:01, , 17F
問題嗎?
12/14 04:01, 17F

12/14 18:46, , 18F
謝謝樓上:) ps我不是資工系的~那是共同教室的ip
12/14 18:46, 18F

12/14 19:19, , 19F
所以你解決你的問題了?
12/14 19:19, 19F

12/15 22:26, , 20F
嗯好像是這個問題:)我後來用int陣列就可以了!謝謝!
12/15 22:26, 20F
文章代碼(AID): #1D1VIBpQ (C_and_CPP)