1. #include <stdio.h>
    2. #include <string.h>
    3. #define MAX 500
    4. void reverse(char a[]){
    5. char temp;
    6. int len = strlen(a), i;
    7. for(i = 0; i < (len+1)/2; i++){
    8. temp = a[i];
    9. a[i] = a[len-i-1];
    10. a[len-i-1] = temp;
    11. }
    12. }
    13. void func(char num1[], char num2[]){
    14. int l1 = strlen(num1), l2 = strlen(num2);
    15. //让p1、p2指向数字末尾
    16. char *p1 = &num1[l1-1], *p2 = &num2[l2-1];
    17. char result[MAX], *p3 = result;
    18. //是否需要借位
    19. int n = 0;
    20. int rn1, rn2;
    21. while (p1 >= num1 || p2 >= num2){
    22. //获取真实数值
    23. if(p1 >= num1){
    24. rn1 = *p1 - '0';
    25. p1--;
    26. }else{
    27. rn1 = 0;
    28. }
    29. if(p2 >= num2){
    30. rn2 = *p2 - '0';
    31. p2--;
    32. }else{
    33. rn2 = 0;
    34. }
    35. *p3 = (10 + rn1 - rn2 - n) % 10 + '0';
    36. if(rn1-n < rn2){
    37. n = 1;
    38. }else{
    39. n = 0;
    40. }
    41. p3++;
    42. }
    43. *p3 = '\0';
    44. while (1){
    45. if(*--p3 == '0' && p3 != result){
    46. *p3 = '\0';
    47. }else{
    48. break;
    49. }
    50. }
    51. reverse(result);
    52. printf("%s\n", result);
    53. }
    54. void BigNumSub(char num1[], char num2[]){
    55. int len;
    56. if(strlen(num1) == strlen(num2)){
    57. len = strlen(num1);
    58. if(num1[len-1] > num2[-1]){
    59. func(num1, num2);
    60. } else{
    61. func(num2, num1);
    62. }
    63. }else if(strlen(num1) > strlen(num2)){
    64. func(num1, num2);
    65. }else{
    66. func(num2, num1);
    67. }
    68. }
    69. int main(int argc, char *argv[]) {
    70. BigNumSub("10113", "1013421");
    71. return 0;
    72. }