#include<iostream>#include<string>#include<stack>usingnamespace std;intcalculate(int a,int b,char sym){switch(sym){case'+':return a + b;break;case'-':return a - b;break;case'*':return a * b;break;case'/':return a / b;break;default:return0;break;}}intprocess(string s){int flag =0;//0无符号,1为正号,2为负号
stack<int> numst;
stack<char> symbolst;for(int i =0; i < s.size(); i++){if(isdigit(s[i])){int j = i;int num =0;while(i +1< s.size()&&isdigit(s[i +1])) i++;
string tmp = s.substr(j, i - j +1);for(int k =0; k < tmp.size(); k++){
num = num *10+(tmp[k]-'0');}if(flag ==2) num =0- num;
flag =0;
numst.push(num);}elseif(s[i]=='*'|| s[i]=='/'|| s[i]=='('){
symbolst.push(s[i]);}elseif(s[i]=='+'|| s[i]=='-'){if(i ==0|| s[i -1]=='('){if(s[i]=='+') flag =1;else flag =2;}while(!flag &&!symbolst.empty()&& symbolst.top()!='('){int b =0, a =0;char sym_tmp;
b = numst.top(); numst.pop();
a = numst.top(); numst.pop();
sym_tmp = symbolst.top(); symbolst.pop();
numst.push(calculate(a, b, sym_tmp));}if(!flag) symbolst.push(s[i]);//}elseif(s[i]==')'){while(symbolst.top()!='('){int b =0, a =0;char sym_tmp;
b = numst.top(); numst.pop();
a = numst.top(); numst.pop();
sym_tmp = symbolst.top(); symbolst.pop();
numst.push(calculate(a, b, sym_tmp));}
symbolst.pop();}else{
cout <<"error!"<< endl;}}while(!symbolst.empty()){int b =0, a =0;char sym_tmp;
b = numst.top(); numst.pop();
a = numst.top(); numst.pop();
sym_tmp = symbolst.top(); symbolst.pop();
numst.push(calculate(a, b, sym_tmp));}return numst.top();}intmain(){
string str ="";while(cin >> str){int res =process(str);
cout << res << endl;}return0;}
55.挑7
#include<bits/stdc++.h>usingnamespace std;boolis_7_beishu(int num){if(num %7==0){returntrue;}returnfalse;}boolbao_han_7(int num){
string tmp =to_string(num);for(char c : tmp){if(c =='7'){returntrue;}}returnfalse;}voidprocess(int n,int& res){for(int i =1; i <= n; i++){if(is_7_beishu(i)||bao_han_7(i)){
res++;}}}intmain(){int n =0;
cin >> n;int res =0;process(n, res);
cout << res << endl;return0;}
56.完全数计算
#include<bits/stdc++.h>usingnamespace std;boolisAllNum(int num){int tmp =0;for(int i =1; i < num; i++){if(num % i ==0){
tmp += i;}}if(tmp == num){//cout << num<<"是完全数。"<<endl;returntrue;}returnfalse;}intmain(){int num =0;while(cin>>num){int res =0;for(int i =1; i <= num; i++){if(isAllNum(i)) res++;}
cout<<res<<endl;}return0;}
57.高精度整数加法
#include<bits/stdc++.h>usingnamespace std;longstr2int(string s){long res =0;for(int i =0; i < s.size(); i++){
res = res *10+(s[i]-'0');//cout << " " << res << endl;}//cout << res << endl;return res;}intmain(){
string A ="";
string B ="";while(cin >> A >> B){/*long s1Num = str2int(s1);
long s2Num = str2int(s2);
cout << s1Num + s2Num << endl; //会超出范围*/int i = A.size()-1;int j = B.size()-1;
string res ="";int carry =0;//进位while(i >=0|| j >=0){int digitA = i >=0? A[i--]-'0':0;int digitB = j >=0? B[j--]-'0':0;int sum = digitA + digitB + carry;
carry = sum /10;//是否有进位
sum = sum %10;//当前的非进位和
res +=to_string(sum);}if(carry ==1) res +="1";//最后的进位 //reverse(res.begin(), res.end());//
cout << res << endl;}return0;}
58.输入n个整数,输出其中最小的k个
#include<bits/stdc++.h>usingnamespace std;intmain(){int n =0, k =0;while(cin>>n>>k){
vector<int>vec(n,0);for(int i =0; i < n; i++){int num =0;
cin>>num;
vec[i]= num;}sort(vec.begin(), vec.end());for(int i =0; i < k; i++){
cout << vec[i]<<" ";}
cout << endl;}return0;}