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 }

    运行结果:

  • 相关阅读:
    react——axios 和fetch-jsonp
    react——路由跳转、动态路由、get传值
    react——生命周期函数
    设置文字在水平垂直居中-高度自动撑开的块级元素也可以
    react——父子组件通信
    react-todoList
    react中获取输入框中值的两种方式——受控组件和非受控组件
    react中事件的使用
    asp.net core mvc视频A:笔记6-1.应用发布与部署
    asp.net core mvc视频A:笔记5-1.路由规则
  • 原文地址:https://www.cnblogs.com/cpsmile/p/4425073.html
Copyright © 2011-2022 走看看