zoukankan      html  css  js  c++  java
  • 长整数相加减

      1 #include<stdio.h>
      2 #include<string>
      3 using namespace std;
      4 
      5 const int N=30;
      6 int  min(int n,int m)//返回两个数中的最小一个数
      7 {
      8     return (n<m) ? n : m;
      9 }
     10 
     11 int  max(int n,int m)//返回两个数中的最大一个数
     12 {
     13     return (n>m) ? n : m;
     14 }
     15 
     16 void Add()//两个长整数相加
     17 {
     18     int i,carry;
     19     char num1[N],char num2[N];//数字1,数字2
     20     int strlen_num1,strlen_num2;//数字1的长度,数字2的长度
     21     int Num1[N],Num2[N],Result[N];
     22     int minnum,maxnum;//两个数中长度最大的一个
     23     printf("        ---------Add----------
    ");
     24     printf("请输入整数1:");
     25     scanf("%s",&num1);
     26     printf("请输入整数2:");
     27     scanf("%s",&num2);
     28     
     29     strlen_num1 = strlen(num1);//获得num1的长度
     30     strlen_num2 = strlen(num2);//获得num2的长度
     31     //printf("%d",strlen_num1);
     32     
     33     for(i=0;i<strlen_num1;i++)
     34     {
     35         Num1[i] = num1[strlen_num1-1-i] - '0';//字符转化为整数
     36     //    printf("%d
    ",Num1[i]);
     37         
     38     }
     39 
     40     for(i=0;i<strlen_num2;i++)
     41     {
     42         Num2[i] = num2[strlen_num2-1-i] - '0';//字符转化为整数
     43     }
     44     
     45     
     46     minnum = min(strlen_num1,strlen_num2);
     47     maxnum = max(strlen_num1,strlen_num2);
     48 
     49     carry = 0;//进位初始为0
     50     for(i=0;i<minnum;i++)
     51     {
     52         Result[i] = (Num1[i] + Num2[i] + carry) % 10;
     53         carry = (Num1[i] + Num2[i] + carry)/10;
     54     }
     55      
     56 
     57     if(strlen_num1>minnum)
     58     {
     59         for(i=minnum;i<strlen_num1;i++)
     60         {
     61             Result[i] = (Num1[i]+ carry) % 10;
     62             carry = (Num1[i]+ carry)/10;
     63 
     64         }
     65     }
     66 
     67     if(strlen_num2>minnum)
     68     {
     69         for(i=minnum;i<strlen_num2;i++)
     70         {
     71             Result[i] = (Num2[i]+ carry) % 10;
     72             carry = (Num2[i]+ carry)/10;
     73         }
     74     }
     75 
     76     if(carry>0)//最后一位有进位
     77     {
     78         Result[maxnum] = 1;
     79         maxnum++;
     80     }
     81     printf("结果:");
     82     printf("%s+%s=",num1,num2);
     83     for(i=maxnum-1;i>=0;i--)
     84     {
     85         printf("%d",Result[i]);
     86     }
     87     printf("
    
    ");
     88 }
     89 
     90 void Sub()//两个长整数相减
     91 {
     92     int i,j,carry;
     93     char num1[N],char num2[N];//数字1,数字2
     94     int strlen_num1,strlen_num2;//数字1的长度,数字2的长度
     95     int Num1[N],Num2[N],Result[N];
     96     int minnum,maxnum;//两个数中长度最大的一个
     97     printf("        ---------Sub----------
    ");
     98     printf("请输入整数1:");
     99     scanf("%s",&num1);
    100     printf("请输入整数2:");
    101     scanf("%s",&num2);
    102     
    103     strlen_num1 = strlen(num1);//获得num1的长度
    104     strlen_num2 = strlen(num2);//获得num2的长度
    105     
    106     for(i=0;i<strlen_num1;i++)
    107     {
    108         Num1[i] = num1[strlen_num1-1-i] - '0';//字符转化为整数
    109     }
    110 
    111     for(i=0;i<strlen_num2;i++)
    112     {
    113         Num2[i] = num2[strlen_num2-1-i] - '0';//字符转化为整数
    114     }
    115     
    116     minnum = min(strlen_num1,strlen_num2);
    117     maxnum = max(strlen_num1,strlen_num2);
    118 
    119     if(minnum==strlen_num1)//被减数小
    120     {
    121         for(i=minnum;i<maxnum;i++)Num1[i] = 0;//补0
    122         for(i=0;i<maxnum;i++)
    123         {
    124             if(Num2[i]<Num1[i])//需要借位
    125             {
    126                 j = i +1;
    127                 while(j==0)
    128                 {
    129                     Num2[j] += 9;
    130                     j++;
    131                 }
    132                 Num2[j]--;
    133                 Result[i] = Num2[i] + 10 - Num1[i] ;
    134             }else Result[i] = Num2[i] - Num1[i] ;    
    135             //printf("%d %d
    ",Result[i],carry);
    136         }
    137     
    138         printf("结果:");
    139         printf("%s-%s=",num1,num2);
    140         printf("-");
    141         for(i=maxnum-1;i>=0;i--)
    142         {
    143             if(Result[i]!=0)printf("%d",Result[i]);
    144         }
    145         printf("
    ");
    146     }else{//被减数大
    147         for(i=minnum;i<maxnum;i++)Num2[i] = 0;//补0
    148         for(i=0;i<maxnum;i++)
    149         {
    150             if(Num1[i]<Num2[i])//需要借位
    151             {
    152                 j = i +1;
    153                 while(j==0)
    154                 {
    155                     Num1[j] += 9;
    156                     j++;
    157                 }
    158                 Num1[j]--;
    159                 Result[i] = Num1[i] + 10 - Num2[i] ;
    160             }else Result[i] = Num1[i] - Num2[i] ;    
    161             //printf("%d %d
    ",Result[i],carry);
    162         }
    163     
    164         printf("结果:");
    165         printf("%s-%s=",num1,num2);
    166         for(i=maxnum-1;i>=0;i--)
    167         {
    168             if(Result[i]!=0)printf("%d",Result[i]);
    169         }
    170         printf("
    ");
    171     }
    172 }
    173 int main()
    174 {
    175     int select,con;
    176     printf("-----------两个长整数相加减------------
    ");
    177     do{
    178         printf("        -----------------------
    ");
    179         printf("       |--------1::加法-------|
    ");
    180         printf("       |--------0::加法-------|
    ");
    181         printf("        -----------------------
    ");
    182         printf("你的选择:");
    183         scanf("%d",&select);
    184         if(select==1)
    185         {
    186             Add();
    187         }else {
    188             Sub();
    189         }
    190         printf("        -----------------------
    ");
    191         printf("       |--------1::继续-------|
    ");
    192         printf("       |--------0::退出-------|
    ");
    193         printf("        -----------------------
    ");
    194         printf("你的选择:");
    195         scanf("%d",&con);
    196     }while(con==1);
    197     return 0;
    198 }
  • 相关阅读:
    跟我学Makefile(七)
    C++单例模式
    乘法逆元及求法
    推荐几个jetbrains全家桶好用的插件,同时作为备忘
    win32 获取本机网卡信息(MAC地址,IP地址等)
    centos7 安装 mysql-python时 报错 EnvironmentError: mysql_config not found
    VS2013 中使用 CxImage 库时用Unicode编码时出现链接错误
    剑指offer-二叉搜索树的后序遍历序列
    剑指offer-顺时针打印矩阵
    剑指offer-二叉树的镜像
  • 原文地址:https://www.cnblogs.com/minmsy/p/5079461.html
Copyright © 2011-2022 走看看