zoukankan      html  css  js  c++  java
  • 洛谷 P2142 高精度减法(模板)

    题目描述

    高精度减法

    输入输出格式

    输入格式:

     

    两个整数a,b(第二个可能比第一个大)

     

    输出格式:

     

    结果(是负数要输出负号)

    输入输出样例

    输入样例#1: 
    2
    1
    输出样例#1: 
    1

    说明

    20%数据a,b在long long范围内

    100%数据0<a,b<=10的10000次方

    AC代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 string a1,b1;
     6 int a[100000],b[100000],c[100000];
     7 int main()
     8 {
     9     cin >> a1 >> b1;
    10     int lena = a1.length();
    11     int lenb = b1.length();
    12     for(int i = 0;i < lena; i++)//倒着存数 
    13         a[lena-i] = a1[i] - 48;
    14     for(int j = 0;j < lenb; j++)//倒着存数 
    15         b[lenb-j] = b1[j] - 48;
    16     if(lenb > lena) {//如果b比a数位多,说明结果为负 
    17         for(int i = 1;i <= lenb; i++) 
    18             if(b[i] < a[i]) c[i] = b[i] + 10 - a[i],b[i+1]--;//借位 
    19             else c[i] = b[i] - a[i];
    20         while(c[lenb] == 0 && lenb != 1) lenb--;//去0 
    21         printf("-");
    22         for(int i = lenb;i >= 1; i--)
    23             printf("%d",c[i]);
    24         return 0;
    25     }
    26     if(lenb == lena) {
    27         int aa = lena,bj = 0;
    28         while(aa>0) {//判断a和b谁大 
    29             if(b[aa] > a[aa]){
    30                 bj = 1;
    31                 break;
    32             } 
    33             aa--;
    34         }
    35         if(bj) {//b大 
    36             for(int i = 1;i <= lenb; i++) 
    37                 if(b[i] < a[i]) c[i] = b[i] + 10 - a[i],b[i+1]--;//借位 
    38                 else c[i] = b[i] - a[i];
    39             while(c[lenb] == 0 && lenb != 1) lenb--;//去0 
    40             printf("-");
    41             for(int i = lenb;i >= 1; i--)
    42                 printf("%d",c[i]);
    43             return 0;
    44         }
    45         else {//a大 
    46             for(int i = 1;i <= lena; i++)
    47                 if(a[i] < b[i]) c[i] = a[i] + 10 -b[i],a[i+1]--;//借位 
    48                 else c[i] = a[i] - b[i];
    49             while(c[lena] == 0 && lena != 1) lena--;//去0
    50             for(int i = lena;i >= 1; i--)
    51                 printf("%d",c[i]);
    52             return 0;
    53         }
    54     }
    55     for(int i = 1;i <= lena; i++)
    56         if(a[i] < b[i]) c[i] = a[i] + 10 - b[i],a[i+1]--;//借位 
    57         else c[i] = a[i] - b[i];
    58     while(c[lena] == 0 && lena != 1) lena--;//去0
    59     for(int i = lena;i >= 1; i--)
    60         printf("%d",c[i]);
    61     return 0;
    62 }
  • 相关阅读:
    常见的灰度发布系统规则
    golang中的路由分组
    艾森豪威尔矩阵
    列文定理
    吃狗粮定理
    mysql事务 锁
    mysql中explain优化分析
    mysql hash索引优化
    各种浏览器内核介绍
    浏览器 兼容性问题总结
  • 原文地址:https://www.cnblogs.com/lipeiyi520/p/10367343.html
Copyright © 2011-2022 走看看