学习+1
记笔记的第一天,还是代码小白,希望如果有什么不对的地方,大佬多多指正。
学习目标:
蓝桥杯省奖
学习内容:
第一道题源于蓝桥杯官网
第二道题源于PTA(作业)
大整数求和
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
//反转字符串
void FanStr(string&s){
int n=s.length();
for(int i=0;i<n/2;i++){
//swap函数来源于头文件algorithm,它包含一些算法
swap(s[i],s[n-i-1]); //交换位置
}
}
//将两个大整数相加
string addNums(string num1,string num2){
FanStr(num1);
FanStr(num2);
string result="";
int carry=0;
int sum=0;
for(int i=0;i<max(num1.size(),num2.size());i++){
sum=carry; //将carry储存进位赋给sum
if(i<num1.size()){
sum+=num1[i]-'0'; //将字符串转为int类型
}
if(i<num2.size()){
sum+=num2[i]-'0'; //将字符串转为int类型
}
carry=sum/10;
result+=(sum%10)+'0'; //将int类型转为字符串
}
//循环结束,判断是否还有进位
if(carry){
result+=(carry+'0');
}
FanStr(result); //再次反转,得到正确顺序
return result;
}
int main(){
string num1,num2;
//读取数组
while(cin>>num1>>num2){
string sum=addNums(num1,num2);
//去除前导0
//auto允许编译器自动推断变量的类型
//it是一个迭代器,begin和end函数返回指向容器开始和结束的迭代器,它们通常一起使用
auto it=sum.begin();
//只要it指向的字符是'0'并且未到末尾,就不断递增迭代器it
while(it!=sum.end()&&*it=='0')++it;
if(it==sum.end()){
cout<<"0"<<endl; //如果全为0,则输出0
}else{
cout<<string(it,sum.end())<<endl;
}
}
return 0;
}
学习时间:
周末
学习产出:
参加蓝桥杯周赛,深刻认识到自己的不足
PTA的题*1