大数相加和大数相乘
2016-09-04 21:22
169 查看
大数相加:
从后向前变量相加的字符串,并将当前位的数转为整型进行加法操作,并判断是否有进位,保存进位,以便进行下一次的操作。
代码:
大数相乘:
主函数:
从后向前变量相加的字符串,并将当前位的数转为整型进行加法操作,并判断是否有进位,保存进位,以便进行下一次的操作。
代码:
//大数相加 char* add(char *str1, char *str2) { int len1 = strlen(str1); int len2 = strlen(str2); int i = len1 - 1; int j = len2 - 1; int temp = 0;//进位 int max = len1 > len2 ? len1 : len2; //定义结果字符 char *ans = new char[max + 1]; memset(ans, 0, max + 1);//初始化 ans[max--] = '\0'; for (; i >= 0 && j >= 0; --i, --j) { int sum = (str1[i] - '0') + (str2[j] - '0') + temp; if (sum >= 10) {//当前位结果大于10 sum -= 10; temp = 1;//进位设为1 } else { temp = 0; } ans[max--] = sum + '0'; } //第一个字符串还有剩余 while (i >= 0) { ans[max--] = ((str1[i--] - '0') + temp) + '0'; if (temp == 1) { temp = 0; } } //第二个字符串还有剩余 while (j >= 0) { ans[max--] = ((str2[j--] - '0') + temp) + '0'; if (temp == 1) { temp = 0; } } return ans; }
大数相乘:
//字符串逆转 void reverseOrder(char *a, int begin, int end) { char temp; while (begin < end) { temp = a[begin]; a[begin] = a[end]; a[end] = temp; ++begin; --end; } } //大数相乘 char* mutil(char *str1, char *str2) { int len1 = strlen(str1); int len2 = strlen(str2); char *ans = new char[len1 + len2 + 1]; memset(ans, '0', len1 + len2 + 1); ans[len1 + len2] = '\0'; reverseOrder(str1, 0, len1 - 1); reverseOrder(str2, 0, len2 - 1); int mulitFag;//乘法进位 int addFag;//加法进位 for (int i = 0; i < len2; ++i) {//str2的每一位 mulitFag = 0; addFag = 0; for (int j = 0; j < len1; ++j) {//str1的每一位 int temp1 = (str1[j] - '0') * (str2[i] - '0') + mulitFag;//计算str2的一位和str1的每一位的积 mulitFag = temp1 / 10;//计算乘法进位,如35/10=3进位为3 temp1 = temp1 % 10;//求出个位数的值,如35%10=5 int temp2 = (ans[i + j] - '0') + temp1 + addFag;//计算当前位+求积的个位数+和的进位 addFag = temp2 / 10;//求和的进位,是否大于10 ans[i + j] = temp2 % 10 + '0';//求出当前位的个位数,并转为字符 } //保存一次乘积的最高位的数 ans[i + len1] += mulitFag + addFag; } reverseOrder(ans, 0, len1 + len2 - 1); return ans; }
主函数:
int main() { char data1[] = "1234567891234567"; char data2[] = "234567899876543221"; char *str3 = add(data1, data2); cout << str3 << endl; char str1[] = "123"; char str2[] = "57";//180 char *str4 = mutil(str1, str2); if (str4[0] != '0') cout << str4; else cout << (str4 + 1); cout << endl; system("pause"); return 0; }
相关文章推荐
- 大数相乘、大数相加、大数相减Java版本
- Java实现大数相加、相乘(不使用BigInteger)
- 大数问题:用字符串解决大数相加和相乘
- 简单的大数相加想法和相乘
- 大数相乘+大数相加
- 大数相乘、相加
- 大数相乘+大数相加
- 大数相加,相减,相乘算法(JAVA代码)
- 大数相乘、大数相加、大数相减Java版本
- 大数相加,大数相乘和100!
- 用单链表实现大数相加,相乘
- 高精度模版(大数相加 相乘 相除)
- 大数相加与相乘算法实现
- 大数相加 大数相乘 C++
- 链表实现大数相加和大数相乘
- 无限大数 相加-,可以方便的改为相减,相乘
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
- 大数(相加+相减+相乘)
- 大数相乘+大数相加
- Linux C/C++ 编程练手 --- 大数相加和大数相乘