博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
任意长度两个正整数相加
阅读量:3526 次
发布时间:2019-05-20

本文共 1689 字,大约阅读时间需要 5 分钟。

#include 
#include
#include
#ifdef DEBUG#define debug(fmt, args...) printf(fmt, ##args)#else#define debug(fmt, args...)#endifchar *big_add(char *num1, char *num2){ int c = 0; /* 开始最低进位为0 */ int i = strlen(num1) - 1; /* 指向第一个加数的最低位 */ int j = strlen(num2) - 1; /* 指向第二个加数的最低位 */ int k;/* 指向结果的最低位 */ debug("i = %d, j = %d\n", i, j); debug("num1 = %s, num2 = %s\n", num1, num2); /* 得到两个数中较大数的位数,并加1位作为预留进位空间 */ int maxLength = strlen(num1) >= strlen(num2) ? strlen(num1) + 1 : strlen(num2) + 1; debug("maxLength = %d\n", maxLength); char *rst = (char *)malloc(sizeof(char) * (maxLength + 1)); if (rst == NULL) { printf("malloc error\n"); exit(1); } rst[maxLength] = '\0'; k = maxLength - 1; /* 指向结果的最低位 */ debug("k = %d\n", k); while ((i >= 0) && (j >= 0)) { /* 进算本位的值 */ rst[k] = ((num1[i] - '0') + (num2[j] - '0') + c)%10 + '0'; /* 向高位进位的值 */ c = ((num1[i] - '0') + (num2[j] - '0') + c) / 10; --i; --j; --k; } while (i >= 0) { rst[k] = ((num1[i] - '0') + c)%10 + '0'; c = ((num1[i] - '0') + c) / 10; --i; --k; } while (j >= 0) { rst[k] = ((num2[j] - '0') + c)%10 + '0'; c = ((num2[j] - '0') + c) / 10; --j; --k; } rst[0] = c + '0'; /* 之所以返回首地址而不在该函数去判断是否有进最高位是因为要释放内存 * 否则在没有进位的情况下内存释放会有问题 */ return rst;/* if (rst[0] != '0') { debug("in if\n"); return rst; } else { debug("in else if\n"); return (rst + 1); }*/}int main(int argc, char **argv){ char *res = NULL; if (argc != 3) { printf("Usage:\n"); printf("%s num1 num2\n", argv[0]); return -1; } res = big_add(argv[1], argv[2]); if (res[0] != '0') printf("%s + %s = %s\n", argv[1], argv[2], res); else printf("%s + %s = %s\n", argv[1], argv[2], res + 1); free(res); return 0;}

转载地址:http://kauhj.baihongyu.com/

你可能感兴趣的文章
如何设计一个秒杀系统 -- 架构原则
查看>>
如何设计一个秒杀系统 -- 动静分离方案
查看>>
JWT 快速了解
查看>>
实习日志一
查看>>
排序算法稳定性
查看>>
图算法总结(判断有环、最短路径)
查看>>
spring中的类
查看>>
python练习编程网址
查看>>
Python练习小程序1
查看>>
pytorch用于多标签分类的bceloss
查看>>
C++程序设计:打印杨辉三角形
查看>>
C# 方法内改变参数的引用 不影响方法外的值
查看>>
C# vs2019 智能提示中文突然变成英文
查看>>
linux开机引导和启动过程(详细)(含配置文件解读)
查看>>
Vue学习笔记——常见简写&修饰符
查看>>
vue-element-admin源码解读——项目启动过程
查看>>
zcmu 1577 食堂的蛋饼(思维)
查看>>
zcmu 1796 wjw的数学题 (唯一分解定理+排列组合)
查看>>
hdu 4135 Co-prime(分解质因数+容斥定理)
查看>>
hdu 4407 Sum(分解质因数+容斥定理)
查看>>