zoukankan      html  css  js  c++  java
  • 两个大数相加

    通过字符串数组实现两个大数相加

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 
     5 //大数的最大位数
     6 #define MAX 100
     7 
     8 //和的最大位数
     9 #define N 101
    10 
    11 int main(int argc,char *argv[])
    12 {
    13     int i;//工作指针
    14     int num1, num2, num3;//记录a,b两数的位数以及 两数相加后的和的位数
    15     int c = 0;//记录进位
    16     int sum;//记录某位相加的和
    17 
    18     char temp[N];//记录相加的和
    19     //为两数动态分配内存
    20     char *a = (char*)malloc(MAX*sizeof(char));
    21     char *b = (char*)malloc(MAX*sizeof(char));
    22 
    23     printf("Enter the first number:
    ");
    24     scanf("%s",a);
    25     printf("Enter the second number:
    ");
    26     scanf("%s",b);
    27 
    28     num1 = strlen(a);
    29     num2 = strlen(b);
    30 
    31     //a记录位数较高的数
    32     if(num1 < num2)
    33     {
    34         char *p;
    35         int temp;
    36         p = a;
    37         a = b;
    38         b = p;
    39 
    40         temp = num1;
    41         num1 = num2;
    42         num2 = temp;
    43     }
    44     num3 = num1;//记录较大的位数
    45 
    46     //相加
    47     for(i = 0; i < num1; i++)
    48     {
    49         //工作指针小于较小的位数
    50         if(i < num2)
    51         {
    52             //记录相加的和
    53             sum = a[num1-i-1]-'0' + b[num2-i-1]-'0' + c;
    54             if(sum >= 10)//和大于10
    55             {
    56                 c = 1;
    57                 temp[i] = (char)((int)('0') + sum - 10);
    58             }
    59             else//和小于10
    60             {
    61                 c = 0;
    62                 temp[i] = (char)((int)('0') + sum);
    63             }
    64         }
    65         else{ //i >= num2
    66             sum = a[num1-i-1] - '0' + c;
    67             if(sum >= 10)
    68             {
    69                 if(i == (num1 - 1))
    70                     num3++;
    71                 c = 1;
    72                 temp[i] = (char)((int)('0') + sum - 10);
    73             }else{
    74                 c = 0;
    75                 temp[i] = (char)((int)('0') + sum);
    76             }
    77         }
    78     }
    79 
    80     //逆向打印两数的和
    81     printf("The sum is:
    ");
    82     for(i = num3-1; i >= 0; i--)
    83         printf("%c",temp[i]);
    84     printf("
    ");
    85 
    86     return 0;
    87 }

    运行结果:

  • 相关阅读:
    centos7上搭建FTP(简单版)教程
    IDEA 添加外部jar包
    linux下搭建本地yum源
    Linux下 正则表达式的用法
    linux下rename用法--批量重命名
    Homebrew 常用命令
    纯内网环境下搭建zabbix
    windows下 批量修改文件名
    【转】git 的常用命令
    [转]linux 下 正则表达式的用法
  • 原文地址:https://www.cnblogs.com/cpsmile/p/4425073.html
Copyright © 2011-2022 走看看