小白月赛22 J : 计算 A + B
2024-10-08 07:35:13
J:计算 A + B
考察点 : 高精度,字符串
坑点 : 字符串中可能全是数字,或者 + 超过 1 个,需要进行特殊判断
析题得侃:
Code:
#include <vector>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
string str;
int T,n;
int main(void) {
vector<int> add(vector<int> &A,vector<int> &B);
scanf("%d",&T);
while(T --) {
vector<int>a,b;
cin >> str;
int len = str.length();
int ans = 0;
for(int i = 0; i < len; i ++) {
if(str[i] == '+') {
ans ++;
}
}
if(str[0] == '+' || str[len - 1] == '+' || ans != 1) {
cout << "skipped" << endl;
} else {
bool flag = false;
for(int i = 0; i < len; i ++) {
if(str[i] == '+') {
flag = true;
continue;
}
if(flag == false) a.push_back(str[i] - '0');
else b.push_back(str[i] - '0');
}
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
vector<int>temp;
temp = add(a,b);
for(int i = temp.size() - 1; i >= 0 ; i --) {
cout << temp[i];
}
cout << endl;
}
}
return 0;
}
vector<int> add(vector<int> &A,vector<int> &B) {
if(A.size() < B.size()) return add(B,A); // 尽量用长的 + 短的,因为这样多余的部分我们就可以直接进行处理了
vector<int> C; // 设置一个 vector 类型的变量,用来作为返回的值
int t = 0;
for(int i = 0; i < A.size(); i ++) {
t += A[i];
if(B.size() > i) t += B[i]; // B 有一定的限制,不能一直加 呀
C.push_back(t % 10);
t /= 10; // 进位
}
if(t) C.push_back(t); // 可能会多出来一个,例如3位数 + 3 位数 ,结果有可能是 4 位数
return C;
}
最新文章
- Write thread-safe servlets [reproduced]
- 简单CSS3实现炫酷读者墙
- google浏览器打开报出文件不可读解决方案
- Xmodem Bootloader
- redis 与 spring整合 hash 增删改操作 list增删改操作
- 跨集群 distcp命令
- poj 1363
- Java类路径
- ASP.NET MVC5 高级编程 第3章 视图
- jsp的useBean标签使用
- SharePoint2010 Form验证配置流程
- css新属性box-sizing应用
- Java的类C结构体的实现,以及对类的某一属性进行排序
- antlr v4 使用指南连载4——词法规则入门之黄金定律
- RabbitMQ通过Exchange.headers属性代替routekey,x-match实现队列精准匹配
- SQLServer之创建唯一聚集索引
- HDU 3371 Connect the Cities(prim算法)
- TensorFlow学习笔记(8)--网络模型的保存和读取【转】
- 《Entity Framework 6 Recipes》中文翻译 ---- 系列教程
- Blocks与Dispatch Queue的使用