1、整数反转后求和
#include <iostream>
using namespace std;
int reversenum(int x)
{int a=0;while (x>0) {a=a*10+x%10;x/=10;}return a;
}
int reverseAdd(int a,int b)
{if(a<1||a>70000||b<1||b>70000){return -1;}int num1=reversenum(a);int num2=reversenum(b);int sum=num1+num2;return sum;
}int main()
{int x;int y;cin>>x>>y;int sum=reverseAdd(x,y);cout<<sum;return 0;
}
2.深度优先遍历(DFS他娘的现在和动态规划变成热门)
#include <iostream>
#include <vector>
using namespace std;
const int inf= 0x7f7f7f7f;
//时间花费矩阵
int a[][7]={{0},{0, 0, 2, 10, 5, 3, -1},{0, -1, 0, 12, -1, -1, 10},{0, -1, -1, 0, -1, 7, -1},{0, 2, -1, -1, 0, 2, -1},{0, 4, -1, -1, 1, 0, -1},{0, 3, -1, 1, 0, 2, 0}
};
int x,y;//目的地,大雾城市
int res;
int used[10];//record falg
int d[50];//记录路
int haveded[50];//走过的路
int anscost=inf;
int anspath;
/*====出发地,花费时间,路径个数=====*/
void dfs(int now,int cost,int path)
{if(now==x){if(cost<anscost){anscost=cost;for(int i=0;i<path;i++){haveded[i]=d[i];}anspath=path;}return;}for(int i=1;i<=6;i++){if(i==y){continue;}if(used[i]==0&&a[now][i]>=0){used[i]=1;d[path]=i;dfs(i,cost+a[now][i],path+1);used[i]=0;}}
}
int main()
{static char emp[] = "";static char col[] = ", ";cin>>x>>y;//出差城市,大雾城市if (x == 5){cout<<"0\n[]\n";return 0;//出差为5的话,0不可达}if (y == 5){cout<<"1000\n[]\n";return 0;//大雾为5的话,1000不可达}d[0] = 5;used[5] = 1;dfs(5, 0, 1);//核心算法char *p = emp;if (anscost == inf){printf("1000\n[]\n");}else{cout<<anscost<<"\n[";for (int i = 0; i < anspath; i++){cout<<p<<haveded[i];p = col;}printf("]\n");}return 0;
}
3.
题目描述
请设计一个算法完成两个超长正整数的加法。
输入描述:
输入两个字符串数字
输出描述:
输出相加后的结果,string型
#include<iostream>
#include <string>
#include <algorithm>
using namespace std;int main()
{string a;string b;cin>>a>>b;int n1=a.size();int n2=b.size();string x,y;for(int i=0;i<n1;i++){x[i]=a[n1-1-i];}for(int i=0;i<n2;i++){y[i]=b[n2-1-i];}if(n1<n2){for(int i=n1;i<n2;i++){x[i]='0';}}else{for(int i=n2;i<n1;i++){y[i]='0';}}int sum[100];int carry=0;int n=max(n1,n2);for(int i=0;i<n;i++){int c=x[i]-48+y[i]-48+carry;if(c<10){sum[i]=c;carry=0;}else{sum[i]=c-10;carry=1;}}if(carry==1){sum[n]=1;n=n+1;}
// for(int j=0;j<n;j++)
// cout<<sum[n-1-j];
// cout<<endl;string res[100];for(int j=0;j<n;j++){res[j]=sum[n-1-j]+'0';}for(int j=0;j<n;j++){cout<<res[j];}cout<<endl;return 0;
}
4.
输入描述:
输入一个字符串。
输出描述:
输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度
示例1
输入
abcd12345ed125ss123058789
输出
123058789,9
#include<iostream>
#include<string>
#include<vector>
using namespace std;int main()
{string str;while(cin>>str){string tmp;vector<string> arr;for(int i=0;i<=str.length();i++){if(str[i]>='0' && str[i]<='9'){tmp+=str[i];}else{if(tmp.length()!=0){arr.push_back(tmp);}tmp.clear();}}int max=0;int length=0;for(int i=0;i<arr.size();i++){if(max<(arr[i]).length()){max=(arr[i]).length();length=max;}}for(int i=0;i<arr.size();i++){if(max==(arr[i]).length()){cout<<arr[i]<<" ";}}cout<<","<<length<<endl;}return 0;
}
5.计算1的的个数
int countInnums(int iNum){int iCount=0;iNum=abs(iNum);while(iNum){iCount++;iNum=iNum&(iNum-1);}return iCount;
}