【发布时间】:2012-09-05 22:33:26
【问题描述】:
我试图想出解决方案...两个大数 a 和 b 由 char[] 或 char* 表示,目标是将它们乘以第三个指针, char* 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吗? -
哦,很奇怪——旧的“我喜欢内存泄漏、双重删除和缓冲区溢出”的代码风格。
-
@BobFincheimer:是的,我想以
char* c的身份进行操作。你能给我一个想法,我怎么能把它写成一个字符? -
@DeadMG 我在他的代码中没有看到任何这些。
-
@BobFincheimer,如果有人翻转了
cout的异常掩码位怎么办?这种类型的代码没有理由更喜欢new[]而不是vector。