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] = '\0'; for (int i = 0; i != m + n; ++i) c[i] += 0x30; if (c[0] == 0x30) for (int i = 0; c[i] != '\0'; ++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] = '\0'; for (int i = 0; i != m + 1; ++i) c[i] += 0x30; if (c[0] == 0x30) for (int i = 0; c[i] != '\0'; ++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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。