פורסם 2012 בדצמבר 2512 שנים תחשוב איך עושים חיבור ארוך, צעד אחרי צעד.תרשום את הצעדים אחד אחד (איפה מתחילים? מתי מפסיקים?, מה חוזר על עצמו? מה לא?), על דף, עד שאתה סגור לגמרי שכיסית את כל המקרים.ותרגם את זה לקוד.זהו, סיימת
פורסם 2012 בדצמבר 2612 שנים מחבר char * add_str (char *num1, char *num2){ int l1= strlen(num1); int l2= strlen(num2); int newsize=0; int i=0,j=0; int carry=0,x=0; char temp,temp2; char *newstr; if(l1 >= l2) newsize=l1+2; else newsize = l2+2; newstr=(char*)calloc(newsize , sizeof(char)); for(i = newsize-2 ; i>=0 ; i--) { x = num1[i]-'0' + num2[i]-'0' + carry ; if(x>9){ carry = 1 ; newstr[i+1] = x%10 + '0' ; } else{ carry=0 ; newstr[i] = x+'0' ; } } if(carry){ for(i=0; i < strlen(newstr) ; i++){ temp = newstr[i+1] ; newstr[i+1] = newstr[i] ; newstr[i]=temp; } newstr[0] = '1'; } //newstr[0]= carry + '0' ; newstr[newsize+1] = '\0' ; return newstr;חבר'ה יש למישהו משהו יותר אלגנטי?
פורסם 2012 בדצמבר 2612 שנים הרעיון מוצלח, אבל יש לך כמה באגים פה ושם.אני מבין שאתה צריך לרוץ על המספרים מהסוף להתחלה, אבל הלולאה שלך עובדת כאילו שניהם באותו אורך. שים לב שהתא הראשון שאתה ניגש אליו הוא newsize-2, כשזה לא בהכרח התא שמכיל את ספרת האחדות בשני המספרים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.