XDOJ1229 - A Game

来源:互联网 发布:淘宝网迷你冰箱 编辑:程序博客网 时间:2024/06/11 13:04

Description

仔细看下面的图。然后给你两个数,你的任务是输出第三个数。

 

 

 

Input
第一行一个整数T(1<=T<=30),表示数据的组数;
每组数据两个整数 A,B (1<=B<=A<=10^100);
Output
输出一个整数。
Sample Input
3
99 72
45 27
39 18
Sample Output
27
18
21

解题思路:

开始以为只是大整数的减法,后来总是WA,上网一查才明白,原来是每个数年各个位相加的和。下面是写的大整数的减法,留个纪念吧

#include<iostream>#include<string>#include<iomanip>using namespace std;const int D = 17;const long long maxN = 1000000000000000000;long long  numA[D];long long  numB[D];void zeroArr(long long a[]){    for(int i=0;i<D;++i)        a[i] = 0;}int strToArr(string str,long long a[]){    int len = str.length();    long long factor =1;    int k = 0;    a[k] = 0;    for(int i=len-1;i>=0;--i)    {        if(factor==maxN)        {            ++k;            factor = 1;        }        int t = str[i]-'0';        a[k] += t*factor;        factor *= 10;    }    return k+1;}void ArrMinus(long long a[],int lena,long long b[],int lenb){    for(int i=lena-1;i>=0;--i)    {        if(b[i]<=a[i])            a[i] = a[i]-b[i];        else        {            int j = i+1;            while(a[j]==0)                ++j;            --a[j];            --j;            while(j>i)            {                a[j] += maxN-1;                --j;            }            a[i] += maxN;            a[i] = a[i]-b[i];        }    }}void print(long long a[],int len){    int i = len-1;    while(a[i]==0&&i>=0) --i;    if(i==-1)        cout<<0<<endl;    else    {        cout<<a[i];        --i;        for(;i>=0;--i)            cout<<setw(D+1)<<setfill('0')<<a[i];        cout<<endl;    }}int main(){    int caseN;    cin>>caseN;    for(int m=0;m<caseN;++m)    {        string Astr,Bstr;        cin>>Astr>>Bstr;        zeroArr(numA);        zeroArr(numB);        int len1 = strToArr(Astr,numA);        int len2 = strToArr(Bstr,numB);        ArrMinus(numA,len1,numB,len2);        print(numA,len1);    }    return 0;}

正确程序:

#include<iostream>#include<string>#include<iomanip>using namespace std;int main(){    int caseN;    cin>>caseN;    for(int m=0;m<caseN;++m)    {        string strA,strB;        cin>>strA>>strB;        int sum;        sum = 0;        for(int i=0;i<strA.length();++i)            sum += strA[i]-'0';        for(int i=0;i<strB.length();++i)            sum += strB[i]-'0';        cout<<sum<<endl;    }    return 0;}


0 0