1016 部分A+B (15分)
正整数 A 的“DA (为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA 。例如:给定 A=3862767,DA =6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。现给定 A、DA 、B、DB
,请编写程序计算 PA +PB 。
输入格式:
输入在一行中依次给出 A、DA 、B、DB ,中间以空格分隔,其中 0<A,B<1010 。
输出格式:
在一行中输出 PA +PB 的值。
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
代码:
1.项目代码地址:https://github.com/MrHaddis/PAT1016
#include <stdio.h>
//MrHaddis
//https://github.com/MrHaddis/PAT1016
int getBase(int index);
int getResult(int base, int size, int array[]);
int main() {
//定义两个数组去接收结果
char numberA[10];
char numberB[10];
//定义两个int值 去接收值
int dA, dB;
//定义下标
int indexA = 0, indexB = 0;
//定义输出结果的数
int result = 0;
//定义两个接收相同数字的数组
int resultA[10];
int resultB[10];
//定义两个接收进制的数字
int tenA, tenB;
scanf("%s %d %s %d", numberA, &dA, numberB, &dB);
//循环获取第一个数相同的数字
for (int i = 0; i < 10; ++i) {
//获取到null的时候获取结束
if (numberA[i] != '\0') {
int num = numberA[i] - '0';
if (dA == num) {
resultA[indexA++] = dA;
}
} else {
break;
}
}
//循环获取第二个数相同的数字
for (int i = 0; i < 10; ++i) {
//获取到null的时候获取结束
if (numberB[i] != '\0') {
int num = numberB[i] - '0';
if (dB == num) {
resultB[indexB++] = dB;
}
} else {
break;
}
}
//获取两个数的进制
tenA = getBase(indexA);
tenB = getBase(indexB);
//计算结果
if (indexA > 0 && indexB > 0) {
result = getResult(tenA, indexA, resultA) + getResult(tenB, indexB, resultB);
} else if (indexA > 0) {
result = getResult(tenA, indexA, resultA);
} else if (indexB > 0) {
result = getResult(tenB, indexB, resultB);
} else {
result = 0;
}
printf("%d", result);
return 0;
}
/**
* 用来计算进制的方法
* **/
int getBase(int index) {
int result = 1;
for (int i = 0; i < index; ++i) {
if (i > 0) {
//每多一位就乘10 相当于算出数字是几位
result *= 10;
}
}
return result;
}
/**
* 用来计算结果的方法
* **/
int getResult(int base, int size, int array[]) {
int result = 0;
for (int i = 0; i < size; ++i) {
result = result + array[i] * base;
//每算一次 除以10 因为是从大到小算的 所以是除法不是乘法
base /= 10;
}
return result;
}