当前位置: 代码迷 >> 综合 >> PAT乙级 1011A+B 和 C (15分) 1016 部分A+B (15分)
  详细解决方案

PAT乙级 1011A+B 和 C (15分) 1016 部分A+B (15分)

热度:73   发布时间:2023-12-17 14:18:51.0

1011 A+B 和 C (15分)

给定区间 [?2?31??,2?31??] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。

输入格式:

输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。

输出格式:

对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。

!不能用int,范围不够,所以我使用了long

#include<iostream>
#include<queue>
using namespace std;int main()
{long all = 0;cin >> all;queue<long> q;for (int i = 0; i < all; i++){long a = 0, b = 0, c = 0;cin >> a;cin >> b;cin >> c;if (a + b > c)//比较q.push(1);elseq.push(0);}for (int i = 1; i <= all; i++){if (q.front() == 1)cout << "Case #" << i << ": " << "true";elsecout << "Case #" << i << ": " <<"false";if (i != all)//最后一个不能有换行cout << "\n";q.pop();}return 0;
}

1016 部分A+B (15分)

正整数 A 的“D?A??(为 1 位整数)部分”定义为由 A 中所有 D?A?? 组成的新整数 P?A??。例如:给定 A=3862767,D?A??=6,则 A 的“6 部分”P?A?? 是 66,因为 A 中有 2 个 6。

现给定 A、D?A??、B、D?B??,请编写程序计算 P?A??+P?B??。

输入格式:

输入在一行中依次给出 A、D?A??、B、D?B??,中间以空格分隔,其中 0<A,B<10?10??。

输出格式:

在一行中输出 P?A??+P?B?? 的值。

 

#include<iostream>
using namespace std;long cal(string a, int da)//计算pa
{int s = 0;for (int i = 0; i < a.size(); i++){int ai = a[i]-'0';//注意string转换为int要减去0的ASCII值if (ai == da)s++;}if (s != 0){int sum=0;for (int i = 1; i < s+1; i++){int beishu = 1;for (int i1 = 1; i1 < i; i1++)//倍数{beishu *= 10;}sum += da * beishu;}return sum;}elsereturn 0;
}int main()
{string a, b;int da, db;cin >> a >> da >> b >> db;cout << cal(a, da) + cal(b, db);return 0;
}