減法我試圖實施減法方法,但得到了一些錯誤。C與char []
55-44正確 555-44是不正確的,它會返回011 100-44會導致段錯誤
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <sstream>
char* subtract(char *n1,char *n2){
int n1Len = strlen(n1);
int n2Len = strlen(n2);
int diff;
int max=n1Len;
char* res = (char*)malloc (max+2);
memset(res, '0', max +1);
res[max] = '\0';
int i=n1Len - 1, j = n2Len - 1, k = max;
for (; i >= 0 && j >=0; --i, --j, --k) {
if(i >= 0 && j>=0)
{
diff = (n1[i] - '0') - (n2[j] - '0');
if(diff<0)
{
int temp=n1[i-1]-'0';
temp=temp-1;
n1[i-1]=temp+'0';
diff+=10;
}
res[i]=diff+'0';
}
else
res[i]=n1[i];
}
return res;
}
int main(void) {
printf("%s\n", subtract("100","44"));
}
附加一個調試器,逐步執行程序,並找出算法偏離正確行爲的位置。另外,請記住內存:從'subtract'分配並返回的數組永遠不會被釋放。 – 2012-01-08 04:31:04
包含頭文件''和''(其內容根本沒有使用)它是C代碼與C++的唯一關係......那麼,在C中使用了predecrement的時候,它會使用postdecrement。 –
2012-01-08 04:32:07
就個人而言,我會從修復'max'開始,確實是兩個字符串的最大值。雖然與你的問題無關,'(n1 [i] - '0') - (n2 [j] - '0')'與n1 [i] - n2 [j]'相同。一個明確的問題是,代碼處理的第一個字符串更長,但不是第二個字符串更長。 – 2012-01-08 04:36:38