您的位置:首页 > 理论基础 > 数据结构算法

字符串转成整数大数乘法

2016-04-07 23:38 459 查看
今天看到的题如下所示:

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

Subscribe to see which companies asked this question

是大数乘法的实现,大数由字符串给出,读取字符串部分还没来得及实现:

#include<stdio.h>
#include<string.h>

void str_multi(int m, char* str1, int n, char * str2){
int result[m+n], tmp
[m+1], a[m], b
, i, j, count, c;
i = 0;
while(i < m){                                           //把字符串转换成整数存放到数组中
a[i] = str1[m-i-1] - '0';
i++;
}
i = 0;
while(i < n){
b[i] = str2[n-i-1] - '0';
i++;
}
i = 0;
while(i < n){                                           //把计算结果放到二维数组中考虑到进位数组的每一行比被乘数长度+1
c = 0;                                          // 用于保存每次乘法的进位
for(j = 0; j < m; j++ ){
tmp[i][j] = b[i] * a[j] % 10 + c;
c = b[i] * a[j] / 10;
}
tmp[i][j] = c;
i++;
}
count = c = 0;
while(count < m+n){                                     //把二维数组中的数按对应的位相加得到每一位的数 
if(count <= m){
i = 0; j = count;
}else{                                          //位数超出被乘数长度时
i = count -m;
j = m;
}
result[count] = c;
while(i < n && j >= 0){
result[count] += tmp[i++][j--];         //计算时一定要个位十位百位相对应的加
}
c = result[count]/10;                           //考虑相加后的进位
result[count] = result[count]%10;
count++;
}
for(i = 0; i < m+n; i++){
printf("%d", result[m+n-i-1]);
}
}

int main(void){
//char str1[20], str2[20];

int m, n, i;
char ch;
i = 0;
/*while(getchar() != '\n');
while((ch = getchar()) <= '9' && ch >= '0' && i < 20) str1[i++] = ch;
while(getchar() != '\n');
while((ch = getchar()) <= '9' && ch >= '0' && i < 20) str2[i++] = ch;*/
char *str1 = "123455";
char *str2 = "2222";
m = strlen(str1);
n = strlen(str2);
str_multi(m, str1, n, str2);
return 0;
}

代码main()函数中读取字符串部分还有点问题,这部分不是很熟练,时间关系明天再来修改。

修改后可以从控制台输入字符串 修改部分代码如下:

int main(void){
char str1[50], str2[50];

int m, n, i;
char ch;
i = 0;
while((ch = getchar()) <= '9' && ch >= '0') str1[i++] = ch;          //读取第一个字符串
str1[i] = '\0';
m = i;
i = 0;
while((ch = getchar()) <= '9' && ch >= '0') str2[i++] = ch;         //读取第二个字符串
str2[i] = '\0';
n = i;
str_multi(m, str1, n, str2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息