/*
FileName:PAT-A1024.Palindromic Number
Author:3stone
Date:2017.2.13
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
#define maxSize 1000
#define caseSize 25//数据 组数
#define ascii_0 48
using 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;
}
大数运算-待整理
最新推荐文章于 2024-02-20 09:29:52 发布