高精度运算经典题目-减法神童

【问题描述】

 两个任意十一位数的减法;(小于二十位)

【输入说明】

输入两个数,分两行

【输出说明】

  输出两个数的差值;(被减数比减数要大)

#include <bits/stdc++.h>
using namespace std;

const int maxL=200;

string s1,s2;
int lena,lenb,lenc;
int a[maxL],b[maxL],c[maxL]; 

void subtract(int a[],int lena,int b[],int lenb,int c[],int &lenc)
{
    memset(c,0,sizeof(c));
    lenc=lena;

    for(int i=0;i<lenc;++i)
    {
        c[i]+=a[i]-b[i];
        if(c[i]<0)
        {
            --c[i+1];
            c[i]+=10;
        }
    }

    //删除前导0
    for(; lenc>1 && c[lenc-1]==0;--lenc);
}

int main()
{
    cin>>s1>>s2;

    lena=s1.length();
    lenb=s2.length();

    //s1所表示的数比S2的情况
    if(lena<lenb || (lena==lenb && s1<s2))
    {
        swap(s1,s2);
        swap(lena,lenb);
        cout<<‘-‘;
    }

    for(int i=0;i<lena;++i)
    {
        a[i]=s1[lena-i-1]-‘0‘;
    }

    for(int i=0;i<lena;++i)
    {
        b[i]=s2[lena-i-1]-‘0‘;
    }

    subtract(a,lena,b,lenb,c,lenc);

    for(int i=lenc-1;i>=0;--i)
    {
        cout<<c[i];
    }
    cout<<endl;

    return 0;
}

  

原文地址:https://www.cnblogs.com/lightworkshopnoi/p/11290288.html

时间: 2024-10-03 21:30:32

高精度运算经典题目-减法神童的相关文章

【高精度】减法神童

问题 D: [高精度]减法神童 时间限制: 1 Sec  内存限制: 64 MB提交: 7  解决: 5[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 在科学城里住着一位减法神童,他可以在一秒钟内算出两个数相减的结果.这两个数可不是普通的数字,它们是11位以上的"宠然大物".为了证明自己神奇的计算能力,减法神童请全城的人都来出题考自己,只要答错一题他就自愿放弃"减法神童"的称号. 你想考考减法神童吗?还是先编写一个程序帮我们算出任意两个11位以上的数

学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67

本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足结合律经典题目1 给定n个点,m个操作,构造O(m+n)的算法输出m个操作后各点的位置.操作有平移.缩放.翻转和旋转    这 里的操作是对所有点同时进行的.其中翻转是以坐标轴为对称轴进行翻转(两种情况),旋转则以原点为中心.如果对每个点分别进行模拟,那么m个操作总共耗时 O(mn).利用矩阵乘法可

十个利用矩阵乘法解决的经典题目

转载自    Matrix67: The Aha Moments 好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.    不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符.在数学中,一个矩阵说穿了就是一个二维数组.一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个

整数高精度运算——加法

高精度运算是信息学的一种重要算法.这种算法使用多个存储单位进行计算,因此它的计算范围超过一般使用一个存储单位的算法.也是一些信息学竞赛的常考题目. 高精度运算主要有以下几个步骤: 1.读取字符串,转换成数字倒序存储到整数数组中: 2.运算,注意进位和借位: 3.倒序输出整数数组,加法注意最高位进位,减法注意高位中的无用的0不要输出: 高精度加法代码: #include<stdio.h>#include<string.h>char s[1000];       //数组比较大时,应作

[转]十个利用矩阵乘法解决的经典题目

好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.    不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符.在数学中,一个矩阵说穿了就是一个二维数组.一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和.比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵

hdu4927 Series 1(组合+公式 Java大数高精度运算)

题目链接: Series 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 423    Accepted Submission(s): 146 Problem Description Let A be an integral series {A1, A2, . . . , An}. The zero-order series o

高精度运算1

1.高精度运算_加法 AYYZOJ p1443 COGS p37 1 type 2 arr=array[1..200]of integer; 3 var 4 a,b:arr;i,la,lb:integer; n:string; 5 procedure add(a,b:arr;la,lb:integer); 6 var i,x,lc:integer; c:arr; 7 begin 8 i:=1; x:=0; 9 while (i<=la) or(i<=lb) do 10 begin x:=a[i

[入门]高精度运算

(本人知识 while(1)cout<<"非常"; 有限,如果你看到我有任何错漏或者不足,真的真的真的恳请大家指出,蟹蟹,我希望大家可以一起进步~) int类型的变量只能存放-2^31~2^31-1范围的数据 long long类型的变量只能存放-2^63~2^63-1范围的数据 对于大数阶乘这种肯定是存不下,因此我们需要用数组存放数据: 下面是一个高精度运算的例子: 题目描述 用高精度计算出S=1!+2!+3!+…+n! (n≤50)S=1!+2!+3!+…+n!(n≤5

矩阵经典题目七:Warcraft III 守望者的烦恼(矩阵加速递推)

https://www.vijos.org/p/1067 很容易推出递推式f[n] = f[n-1]+f[n-2]+......+f[n-k]. 构造矩阵的方法:构造一个k*k的矩阵,其中右上角的(k-1)*(k-1)的矩阵是单位矩阵,第k行的每个数分别对应f[n-1],f[n-2],,f[n-k]的系数.然后构造一个k*1的矩阵,它的第i行代表f[i],是经过直接递推得到的.设ans[][]是第一个矩阵的n-k次幂乘上第二个矩阵,f[n]就是ans[k][1]. 注意:用__int64 #in