zoukankan      html  css  js  c++  java
  • 高精度减法

    1125: 高精度高精度减法

    题目描述

    输入两个正整数(最多1000位),输出它们的差。

    输入

    两行,两个整数

    输出

    一行,一个整数

    样例输入

    999

    1000

    样例输出

    -1

     1 #include <iostream> 
     2 #include <cstring> 
     3 #include <algorithm> 
     4 #define SIZE 100001 
     5 using namespace std; 
     6 char sa[SIZE],sb[SIZE]; 
     7 int a[SIZE],b[SIZE],c[SIZE]; 
     8 int alen,blen,clen,i,j; 
     9 int cmp(string a,string b)
    10 {
    11     if(strlen(sa)>strlen(sb))return 1;
    12     else if(strlen(sa)<strlen(sb))return -1;
    13     else
    14     {
    15         int i,l=strlen(sa);
    16         for(i=0;i<l;i++)
    17         {
    18             if(sa[i]>sb[i])return 1;
    19             else if(sa[i]<sb[i])return -1;
    20         }
    21     }
    22     return 0;          //这个函数是为了比较两个数字的大小,位数大的数当然他就大,若位数相同则诸位比较。
    23 }
    24 int main() 
    25 { 
    26     cin>>sa>>sb; 
    27 if(cmp(sa,sb)==0)         //等于零的时候说明两个数的大小是相同                         
    28     {
    29         cout<<0;
    30         return 0;
    31     }
    32     else if(cmp(sa,sb)==-1)   //第一个数比第二个数大,结果必然是负数
    33     {
    34         cout<<'-';
    35         char t[SIZE];
    36         strcpy(t,sa);
    37         strcpy(sa,sb);
    38         strcpy(sb,t);      //把第一个数和第二个数互换
    39     }
    40     alen=strlen(sa);     
    41     blen=strlen(sb); 
    42     clen=max(alen,blen);     //结果的位数最大和最大位数相同
    43     for(i=0;i<alen;i++) 
    44         a[alen-i]=sa[i]-'0'; 
    45     for(i=0;i<blen;i++)
    46         b[blen-i]=sb[i]-'0'; //倒叙,把字符改为数字
    47     for(i=1;i<=clen;i++)
    48         c[i]=a[i]-b[i];
    49     for(i=1;i<=clen;i++)
    50         if(c[i]<0)
    51             c[i]+=10,c[i+1]--;//减法竖式的补位
    52     while(c[clen]==0&&clen>1)clen--;//为了把前面多余的0去掉
    53     for(i=clen;i>=1;i--) 
    54         cout<<c[i];   //倒叙输出数组。
    55     cout<<endl; 
    56 } 

    **高精度加法,就是模拟竖式。1.比较数字大小,判断是否输出负号。

    2.把大数放前小数放后

    3.把字符串转化为数组,并且转化成计算用的数组顺序。

    4.把数组相减,注意补位。

    5.判断结果长度。

    6.最后倒叙输出数字。

    **这是标程,改天一定用自个写的孝敬这篇博客

  • 相关阅读:
    常用并发类
    线程基本知识
    java多线程基础
    volatile原理小结
    condition学习小结
    阻塞队列、线程池、异步
    Synchronized原理
    wait 和notify
    【Java 8 新特性】Java Comparator.comparing | 提取对象属性,按照指定规则排序
    在Centos8上配置Minio服务使用TLS
  • 原文地址:https://www.cnblogs.com/rax-/p/8526217.html
Copyright © 2011-2022 走看看