博客
关于我
超大数相加
阅读量:167 次
发布时间:2019-02-28

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

以前刚进华为面试时,有一个超大数相加的题目,刚毕业那会儿比较嫩,还没做出来。现在想了一下,还是能做出来的。下面是我的思路和实现过程。

思路概述

  • 问题分析:超大数相加,不能用数据类型只能用字符串存取。
  • 字符处理:需要将每个字符转换成数字进行计算。
  • 进位处理:从右到左逐位相加,处理进位。
  • 字符串处理:反转字符串,进行计算后再反转回去。
  • 代码实现

    #include 
    #include
    int CheckString(char *p) { int len = strlen(p); for (int i = 0; i < len; i++) { if (p[i] < '0' || p[i] > '9') { puts("输入有误,请重新输入!!"); return 1; } } return 0;}int CheckSign(char a) { if ('+' == a) { return 0; } else { puts("运算符输入有误!!!"); return 1; }}void add(char *p1, char *p2) { int len1 = strlen(p1); int len2 = strlen(p2); int i = 0, j = 0, k = 0; int flag = 0, temp = 0; char str[100] = {0}; if (len2 > len1) { len1 = len2; p2 = p1; p1 = p2; p2 = p1; } for (i = len1 - 1, j = len2 - 1; j >= 0; j--, i--) { int a = p1[i] - '0'; int b = p2[j] - '0'; temp = a + b + flag; if (temp <= 9) { str[k++] = temp + '0'; flag = 0; } else { str[k++] = temp % 10 + '0'; flag = 1; } } for (; i >= 0; i--) { if (flag) { if (p1[i] == '9') { str[k++] = '0'; flag = 1; } else { str[k++] = p1[i] + 1; flag = 0; } } else { str[k++] = p1[i]; } k--; } if (flag) { str[0] = '1'; } puts(str);}int main() { char str1[100] = {0}; char str2[100] = {0}; char sign = 0; char res = 0; while (1) { printf("第一个数:"); gets(str1); int check = CheckString(str1); if (check) { continue; } printf("运算符:"); sign = getchar(); int signCheck = CheckSign(sign); if (signCheck) { continue; } printf("第二个数:"); gets(str2); int check2 = CheckString(str2); if (check2) { continue; } if (sign == '+') { add(str1, str2); } else { puts("运算符不支持!!!"); } }}

    代码解释

  • CheckString函数:检查输入字符串是否为数字,返回错误时提示信息。
  • CheckSign函数:检查运算符是否为加号,如果不是则提示错误。
  • add函数:实现大数相加,处理进位,逐位相加,最后处理最高位进位。
  • main函数:用户输入处理,调用相应函数进行验证和计算。
  • 改进思路

  • 简化代码:优化变量命名,减少重复代码。
  • 错误处理:更友好的错误提示,避免用户困惑。
  • 代码结构:分层次处理,提高代码可读性和维护性。
  • 性能优化:减少内存占用,提高处理效率。
  • 通过这样的实现,可以完成两个超大数的相加操作,虽然代码不够简洁,但思路清晰,逻辑严密。以后有机会的话,还可以进一步优化代码结构和错误处理机制。

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

    你可能感兴趣的文章
    Objective-C实现pollard rho大数分解算法(附完整源码)
    查看>>
    Objective-C实现Polynomials多项式算法 (附完整源码)
    查看>>
    Objective-C实现power iteration幂迭代算法(附完整源码)
    查看>>
    Objective-C实现powLinear函数和powFaster函数算法 (附完整源码)
    查看>>
    Objective-C实现prefix conversions前缀转换算法(附完整源码)
    查看>>
    Objective-C实现prime sieve eratosthenes埃拉托斯特尼素数筛选法算法(附完整源码)
    查看>>
    Objective-C实现PrimeFactors质因子分解算法 (附完整源码)
    查看>>
    Objective-C实现pythagoras哥拉斯算法(附完整源码)
    查看>>
    Objective-C实现QLearning算法(附完整源码)
    查看>>
    Objective-C实现QR正交三角分解法算法(附完整源码)
    查看>>
    Objective-C实现qubit measure量子位测量算法(附完整源码)
    查看>>
    Objective-C实现quick select快速选择算法(附完整源码)
    查看>>
    Objective-C实现rabin-karp算法(附完整源码)
    查看>>
    Objective-C实现radians弧度制算法(附完整源码)
    查看>>
    Objective-C实现radianToDegree弧度到度算法(附完整源码)
    查看>>
    Objective-C实现radix sort基数排序算法(附完整源码)
    查看>>
    Objective-C实现rail fence围栏密码算法(附完整源码)
    查看>>
    Objective-C实现rayleigh quotient瑞利商算法(附完整源码)
    查看>>
    Objective-C实现RC4加解密算法(附完整源码)
    查看>>
    Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
    查看>>