私は減算法を実装しようとしましたが、いくつかのバグがありました。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'から返す配列は決して解放されません。 –
ヘッダー「」と「」(内容はまったく使用されていません)を含めると、このCコードとC++の唯一の関係になります...まあ、プレデクリメントもCの間に使用されます。 –
個人的には、実際には2つの文字列の最大値になるように 'max'を修正することから始めます。 '(n1 [i] - '0') - (n2 [j] - '0')'は 'n1 [i] -n2 [j]'と同じであることに注意してください。 1つの明確な問題は、コードが最初の文字列を長く扱いますが、2番目の文字列は長くは処理しないことです。 –