大数相乘
来源:互联网 发布:网络聊天电台 编辑:程序博客网 时间:2024/05/20 21:44
大数相乘的相关知识
http://blog.csdn.net/chhuach2005/article/details/21168179
逐位相乘处理进位法
#include <stdio.h>#include <stdlib.h>#include <string.h>char* getbigdata(char *dataA, char* dataB){ int Negative = 1;//记录正负号 if (dataA == NULL || dataB == NULL) return "NULL pointer"; if ((dataA[0] == '+' && dataB[0] == '-') || (dataA[0] == '-' && dataB[0] == '+')) Negative = -1; if ( (dataA[0] != '+' && dataA[0] != '-') && dataB[0] == '-') Negative = -1; if (dataA[0] == '-' && (dataB[0] != '+' && dataB[0] != '-' ) ) Negative = -1; if (dataA[0] == '+' || dataA[0] == '-') { dataA = dataA + 1; } if (dataB[0] == '+' || dataB[0] == '-') { dataB = dataB + 1; } int lengthA = strlen(dataA); int lengthB = strlen(dataB); for (int k = 0; k < lengthA; k++) { if (dataA[k] > '9' || dataA[k] < '0') { return "Not a digital string"; } } for (int k = 0; k < lengthB; k++) { if (dataB[k] > '9' || dataB[k] < '0') { return "Not a digital string"; } } int *press = malloc(sizeof(int)*(lengthA + lengthB)); memset(press, 0, sizeof(int)*(lengthA + lengthB));//清空此内存,初始化零 //累乘 for (int i = 0; i < lengthA;i++) { for (int j = 0; j < lengthB;j++) { press[i + j + 1] += (dataA[i] - '0')*(dataB[j] - '0');//i+j+1预留一位防止最高位进位 } } for (int i = lengthA + lengthB - 1; i >= 0; i--) { if (press[i] >= 10)//进位 { press[i - 1] += press[i] / 10;//十位 press[i] %= 10;//取出个位数 } } int i = 0; while (press[i] == 0) { i++;//恰好不为0 } char *lastres = malloc(sizeof(char)*(lengthA + lengthB)+1);//+1存正负号 int j = 0; if (Negative == -1) { lastres[j] = '-'; for (j = 1; j < lengthA + lengthB + 1; j++, i++)//前面-已经占了一位 { lastres[j] = press[i] + '0'; } } else { for (j = 0; j < lengthA + lengthB; j++, i++) { lastres[j] = press[i] + '0'; } } lastres[j] = '\0'; return lastres;}void main(){ char str1[100] = { 0 }; char str2[100] = { 0 }; scanf("%s%s", str1, str2); printf("str1=%s\nstr2=%s", str1, str2); char * Answer = getbigdata(str1, str2); printf("\nAnswer=%s\n", Answer); system("pause");}
为帮助理解分析累乘的循环,注意这里是从高位开始累乘的,前面空一个是防止进位;
例如12345*12
0 0
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- [置顶]《开源框架那点事儿25》:对框架模板引擎实现方式的改造实录
- adroid studio 配色方案及字体设置
- 解决数据库中插入时间没有时分秒
- Android Studio快捷键
- 两种添加数据到dropdownlist控件的方法_asp.net技巧
- 大数相乘
- 文章标题
- 看jQuery源码有感
- Leetcode #142 Linked List Cycle II
- linux下字符串与十六进制之间的转换
- ViewConfiguration.getScaledTouchSlop () 用法
- 获取客户端的IP地址request.getRemoteAddr() 用法
- Xcode生成动态库和静态库
- Android中viewSwitcher的使用