我试图想出解决方案...两个大数字a
和b
由char[]
或char*
表示,目标是将它们乘以第三个指针, char* c
:在C/C++中相乘两个大数字
void multiply(const char* a, const char* b){
int len_a = strlen(a);
int len_b = strlen(b);
int* c = new int[ len_a + len_b];
memset(c, 0, sizeof(int) * (len_a + len_b));
for(int i = len_a - 1; i >= 0; i--){
for(int j = len_b - 1; j >= 0; j--){
c[ i + j + 1 ] += (b[ j ] - '0') * (a[ i ] - '0');
}
}
for(int i = len_a + len_b; i >= 0; i--){
if(c[ i ] >= 10){
c[ i - 1 ] += c[ i ]/10;
c[ i ] %= 10;
}
}
cout << a << " * " << b << " = " << c << endl;
delete[] c;
}
我写了上述功能为我做这个手术......然而,当我使用的输入:
int main(void){
const char* a = "999";
const char* b = "99999";
multiply(a, b);
// I expect the answer to be 1 and 6
// profit = 0.92
return 0;
}
我:
999 * 99999 = 0x100100080
为什么我会得到的内存地址,而不是实际的数量? 谢谢!
'INT * C',当你输出,它将输出的指针。你不是想要做'char * c'吗? –
噢,诡异地 - 旧的“我喜欢内存泄漏,双重删除和缓冲区溢出”的代码风格。 – Puppy
@BobFincheimer:是的,我想把它作为'char * c'来完成。你能否给我一个想法,我怎么能把它写成char? – cybertextron