大数运算-待整理

来源:互联网 发布:大数据精准扶贫ppt 编辑:程序博客网 时间:2024/05/09 15:19
/*FileName:PAT-A1024.Palindromic NumberAuthor:3stoneDate:2017.2.13*/#include<cstdio>#include<cstring>#include<iostream>#include<string>#include<cmath>#include<algorithm>#define maxSize 1000#define caseSize 25//数据 组数#define ascii_0 48using namespace std;int getMax(int a, int b) {    if (a > b) return a;    else return b;}void reverseArray(int a[], int b[],int len) {//获取逆置数组    for (int i = 0; i < len; i++)        b[len - i - 1] = a[i];}int judgePal(int a[],int alen) {    //判断是否为回文数    int i = 0, j = alen - 1;    while (i < j) {        if (a[i] != a[j])            return 0;        i++;        j--;    }    return 1;}//大数乘法【一大一小,数组已逆置】/*void big_mul(int a[], int n,int & len) {    //大数乘法【一大一小】要求输入的数组 已是倒序    int i, sum = 0, carry = 0;    for (i = 0; i < len; i++) {        sum = a[i] * n + carry;//部分和        a[i] = sum % 10;        carry = sum / 10;    }    while (carry) {//处理最后的进位        a[i++] = carry % 10;        carry /= 10;        len++;//warning:位数增长    }}*///大数加法【数组已逆置】void big_add(int a[], int b[], int & len) {//大数加法    int carry = 0, sum = 0;    for (int i = 0; i < len; i++) {        sum = a[i] + b[i] + carry;        a[i] = sum % 10;//结果        carry = sum / 10;//进位    }    if (carry)//最高位进位        a[len++] = carry;}void myInput(int a[], int b[],int c[], int& alen,int& blen, int & clen) {    //处理数据    string str;    cin >> str;    alen = str.size();    reverse(str.begin(), str.end());    for (int i = 0; i < alen; i++) {//转为数字 数组表示        a[i] = str[i] - ascii_0;        c[i] = a[i];    }    clen = alen;    cin >> str;    blen = str.size();    reverse(str.begin(), str.end());    for (int i = 0; i < blen; i++)//转为数字 数组表示        b[i] = str[i] - ascii_0;}void myPrint(int a[], int b[], int c[],int alen,int blen,int clen) {    //倒序输出    for (int i = alen - 1; i >= 0; i--)        cout << a[i];    cout << " + ";    for (int i = blen - 1; i >= 0; i--)        cout << b[i];    cout << " = ";    for (int i = clen - 1; i >= 0; i--)        cout << c[i];    cout << endl;}int main() {    int len;    int a[caseSize][maxSize], b[caseSize][maxSize], c[caseSize][maxSize];    int alen[caseSize], blen[caseSize], clen[caseSize], i, caseNum;    memset(a, 0, sizeof(a));//初始化    memset(b, 0, sizeof(b));    memset(c, 0, sizeof(c));    memset(alen, 0, sizeof(alen));    memset(blen, 0, sizeof(blen));    memset(clen, 0, sizeof(clen));    cin >> caseNum;//组数    for (int k = 0; k < caseNum; k++) {        myInput(a[k], b[k], c[k], alen[k], blen[k], clen[k]);//处理数据        len = getMax(alen[k], blen[k]);        big_add(a[k], b[k], len);//相加    }    int k;    for (k = 0; k < caseNum - 1; k++) {        cout << "Case " << k + 1 << ":" << endl;        myPrint(c[k], b[k], a[k], clen[k], blen[k], alen[k]);//输出        cout << endl;    }    cout << "Case " << k + 1 << ":" << endl;    myPrint(c[k], b[k], a[k], clen[k], blen[k], alen[k]);//输出最后一行    return 0;}
0 0
原创粉丝点击