字符串转成整数大数乘法
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
是大数乘法的实现,大数由字符串给出,读取字符串部分还没来得及实现:
代码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;
}
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;
}
相关文章推荐
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结
- C语言中static的作用及C语言中使用静态函数有何好处