• 【9110】高精度减法


    Time Limit: 1 second
    Memory Limit: 2 MB

    问题描述
    
    输入两个正整数x和y,输出第一个数减第二个数的差。
        
     
    

    Input

    输入只有两行,第一行一个整数x,第二行一个整数y。其中0<=x<=10^160,0<=y<=10^160

    Output

    输出有1行,为两个数的差。

    Sample Input

    222222222233333333333333333333
    222222222222222222222222222222
    

    Sample Output

    11111111111111111111(换行)
    
     

    【题解】

    将x和y都逆序存进去。用一个c数组直接等于两个数相减。for (1 -> 较长的长度) c[i] = a[i]-b[i];

    然后for (1 ->较长的长度)

    if (c[i] <0) c[i] +=10;

    c[i+1]--;

    然后去除多余的0;

    【代码】

    #include <cstdio>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string s1,s2,s3;
    int l1,l2,l3,a[200],b[200],c[200];
    
    void input_data() //要判断一下 s1和s2的大小
    {
        cin >> s1;
        cin >> s2;
        l1 = s1.size();
        l2 = s2.size();
        bool bo = false;
        if (l1 < l2) bo = true;
        if (l1 == l2) //如果长度相等 再比较第一个不同的数字 然后判断是否要调换顺序 即确定s1-s2,然后再输出一个负号
            for (int i = 0;i <= l1-1;i++)
                if (s1[i] == s2[i])
                    continue;
                        else
                            if (s1[i] < s2[i])
                                bo = true;
                                    else
                                        break;
        if (bo)
            {
                printf("-");
                s3 = s1;s1 = s2;s2 = s3;
                l1 = s1.size();
                l2 = s2.size();
            }
        for (int i = 1;i <= 199;i++)
            c[i] = 0,a[i] = 0,b[i] = 0;
        for (int i = 1;i <= l1;i++) //把a,b数组表示出来 (逆序)
            a[i] = s1[l1-i] - '0';
        for (int i = 1;i <= l2;i++)
            b[i] = s2[l2-i] - '0';
    }
    
    void get_ans()
    {
        for (int i = 1;i <= l1;i++) //等于两个数相减
            c[i] = a[i] - b[i];
        for (int i = 1;i <= l1;i++)
            if (c[i] < 0)
                c[i] += 10,c[i+1]--;
        while (c[l1] == 0 && l1 > 1)
            l1--;
    }
    
    void output_ans()
    {
        for (int i = l1;i >=1;i--)
            printf("%d",c[i]);
    }
    
    int main()
    {
        input_data();
        get_ans();
        output_ans();
        return 0;
    }
    


     

  • 相关阅读:
    Java常用类库(二):Iterator迭代器和子范围视图
    Java常用类库(一) : Object 和日期类的简单使用
    MyBatis的逆向工程
    AdminLTE介绍和zTree的简单使用
    MyBatis分页组件--PageHelper
    SpringAop--系统日志简例
    Shiro
    Mysql(三):多表查询和存储程序
    MySql(二):常见的那些个约束
    正则表达式一些用法
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632438.html
Copyright © 2020-2023  润新知