大数相乘、相加
发布时间:2020-12-14 02:54:51 所属栏目:大数据 来源:网络整理
导读:char* mult(char *a,char *b,int m,int n){ // 为结果分配内存空间。 char *c = (char*)malloc((m + n + 1) * sizeof(char)); memset(c,(m + n + 1) * sizeof(char)); // 将字符(0 + 0x30 到 9 + 0x30)转换为数字(0到9)进行计算。 for (int i = m - 1,r
char* mult(char *a,char *b,int m,int n) { // 为结果分配内存空间。 char *c = (char*)malloc((m + n + 1) * sizeof(char)); memset(c,(m + n + 1) * sizeof(char)); // 将字符(0 + 0x30 到 9 + 0x30)转换为数字(0到9)进行计算。 for (int i = m - 1,r = m + n - 1; i >= 0; --i,--r) { for (int j = n - 1,k = r; j >= 0; --j,--k) { c[k] += (a[i] - 0x30) * (b[j] - 0x30); int tmp = c[k] / 10; if (tmp > 1) { c[k - 1] += tmp; c[k] -= tmp * 10; } } } // 将由纯数字组成的结果转换为字符串,并去除首部可能还存在的零。 c[m + n] = ' '; for (int i = 0; i != m + n; ++i) c[i] += 0x30; if (c[0] == 0x30) for (int i = 0; c[i] != ' '; ++i) c[i] = c[i + 1]; // 返回结果所在内存单元的首地址。 return c; } #include "stdafx.h" #include <iostream> #include <iomanip> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <cmath> using namespace std; // assume m is bigger than n. char* add(char *a,int n) { // 为结果分配内存空间。 char *c = (char*)malloc((m + 2)* sizeof(char)); memset(c,(m + 2) * sizeof(char)); // 将字符(0 + 0x30 到 9 + 0x30)转换为数字(0到9)进行计算。 for (int i = m,j = n - 1; j >= 0; --i,--j) c[i] += (b[j] - 0x30); for (int i = m,j = m - 1; j >= 0; --i,--j) { c[i] += (a[j] - 0x30); if (c[i] > 9) { c[i - 1] += 1; c[i] -= 10; } } // 将由纯数字组成的结果转换为字符串,并去除首部可能还存在的零。 c[m + 1] = ' '; for (int i = 0; i != m + 1; ++i) c[i] += 0x30; if (c[0] == 0x30) for (int i = 0; c[i] != ' '; ++i) c[i] = c[i + 1]; // 返回结果所在内存单元的首地址。 return c; } void main(){ char *a="999",*b="11"; char *p=add(a,b,3,2); cout<<p<<endl; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |