输入一个整数(含负数),输出3个数据,如下:
1.输出该整数的位数;
2.将该整数各位拆分输出,中间以空格隔开(注意末位不能有空格)。如果是负数,则符号与第一个数一起输出;
3.输出该数的反转数,如为负数,符号位置不变,置于最前。
示例
输入:
-12345
输出:
5
-1 2 3 4 5
-54321
#include <iostream> #include <cmath> #include <algorithm> #include <set> #include <cstdio> #include <string> #include <cstring> /*@author:浅滩 *family: *time: */ //我好像是一个在海边玩耍的孩子, //不时为拾到比通常更光滑的石子或更美丽的贝壳而欢欣鼓舞, //而展现在我面前的是完全未探明的真理之海 using namespace std; int main() { string s_num; int i; getline(cin,s_num); if(s_num[0]=='-')//负数 { cout<<s_num.size()-1<<endl; cout<<"-"<<s_num[1]<<" "; for(i=2;i<s_num.size();i++){ cout<<s_num[i]<<(i==s_num.size()-1? " ":" "); } cout<<"-"; for(int i=s_num.size()-1;i>=1;i--){ cout<<s_num[i]; } } else{ cout<<s_num.size()<<endl; for(i=0;i<s_num.size();i++){ cout<<s_num[i]<<(i==s_num.size()-1? " ":" "); } for(i=s_num.size()-1;i>=0;i--){ cout<<s_num[i]; } } //cout << "Hello world!" << endl; return 0; }
题目:
输入4个IP值组成两个IP段:
第一、二行分别为第一个IP段的起始和结尾IP,第三、四行为第二个IP段的起始和结尾。
要求输出:
若两个IP段有交集则输出"Overlap IP",没有则输出"No Overlap IP"。
示例
输入:
1.1.1.1
255.255.255.255
2.2.2.2
3.3.3.3
输出:
Overlap IP
通过从字符串中提取ip的四位数进行比较,只有两种情况没有交集
代码如下:
#include <iostream> #include <cmath> #include <algorithm> #include <set> #include <cstdio> #include <string> #include <cstring> /*@author:浅滩 *family: *time: */ //我好像是一个在海边玩耍的孩子, //不时为拾到比通常更光滑的石子或更美丽的贝壳而欢欣鼓舞, //而展现在我面前的是完全未探明的真理之海 using namespace std; void get_num(string& a,int *b)//提取ip的四位数字 {//这里和blibli的version版本的那道题目是相似的 int s=0; int top=0; for(int i=0;i<a.size();i++) { if(a[i]!='.') { s=s*10+(a[i]-'0'); } if(a[i]=='.'||i==a.size()-1) { b[top]=s; s=0; top++; } } } int judge(int *a,int *b)//比较ip的大小 { for(int i=0;i<4;i++){ if(a[i]>b[i]) {//ipa>ipb return 1; } else if(a[i]<b[i]){//ipa<ipb return 2; } }return 3;//ipa==ipb } int main() { string ip0_sta,ip0_end,ip_sta,ip_end; int p0_s[4],p0_e[4],p_s[4],p_e[4];//提保存p的四位数字 cin>>ip0_sta>>ip0_end>>ip_sta>>ip_end; get_num(ip0_sta,p0_s); get_num(ip0_end,p0_e); get_num(ip_sta,p_s); get_num(ip_end,p_e); //没找到交际只有两种情况 //1、ip0的终点小于ip的起点 //2、ip的终点小于ip0的起点 if(judge(p0_e,p_s)==2){ cout<<"No Overlap IP"<<endl; return 0; } if(judge(p_e,p0_s)==2){ cout<<"No Overlap IP"<<endl; return 0; } cout<<"Overlap IP"<<endl; return 0; }
因为ip的小数点是3个确定的所以可以直接利用scanf的指定方式输入,省去了读入字符串然后从字符串中提取数字的步骤
#include <iostream> #include <cmath> #include <algorithm> #include <set> #include <cstdio> #include <string> #include <cstring> /*@author:浅滩 *family: *time: */ //我好像是一个在海边玩耍的孩子, //不时为拾到比通常更光滑的石子或更美丽的贝壳而欢欣鼓舞, //而展现在我面前的是完全未探明的真理之海 using namespace std; int judge(int *a,int *b)//比较ip的大小 { for(int i=0;i<4;i++){ if(a[i]>b[i]) {//ipa>ipb return 1; } else if(a[i]<b[i]){//ipa<ipb return 2; } }return 3;//ipa==ipb } int main() { int p0_s[4],p0_e[4],p_s[4],p_e[4];//提保存ip的四位数字 //cin>>ip0_sta>>ip0_end>>ip_sta>>ip_end; scanf("%d.%d.%d.%d",&p0_s[0],&p0_s[1],&p0_s[2],&p0_s[3]); scanf("%d.%d.%d.%d",&p0_e[0],&p0_e[1],&p0_e[2],&p0_e[3]); scanf("%d.%d.%d.%d",&p_s[0],&p_s[1],&p_s[2],&p_s[3]); scanf("%d.%d.%d.%d",&p_e[0],&p_e[1],&p_e[2],&p_e[3]); //没找到交际只有两种情况 //1、ip0的终点小于ip的起点 //2、ip的终点小于ip0的起点 if(judge(p0_e,p_s)==2){ cout<<"No Overlap IP"<<endl; return 0; } if(judge(p_e,p0_s)==2){ cout<<"No Overlap IP"<<endl; return 0; } cout<<"Overlap IP"<<endl; return 0; }
输入两行数据,第一行包含多个正整数,以空格分开,根据每个数的后三位大小进行排序;第二行为数值n,输出排序后指定位置n的数。 要求: 1.若数不足三位,则直接比较; 2.若两数比较结果相等,则两数相对位置不变。 要求输出: 排序后第n个数(位置从1开始)
示例
输入:
12 450 9001 5231 8231 7231
5
输出:
7231
#include <iostream> #include <cmath> #include <algorithm> #include <set> #include <cstdio> #include <string> #include <cstring> /*@author:浅滩 *family: *time: */ //我好像是一个在海边玩耍的孩子, //不时为拾到比通常更光滑的石子或更美丽的贝壳而欢欣鼓舞, //而展现在我面前的是完全未探明的真理之海 using namespace std; const int maxn=3000+5; void mysort(int *a,int n)//不能用sort是因为sort是不稳定排序 { for(int i=0;i<n-1;i++) { for(int j=0;j<n-1-i;j++) { if((a[j]%10+(a[j]/10%10)*10+(a[j]/100%10)*100)>(a[j+1]%10+(a[j+1]/10%10)*10+(a[j+1]/100%10)*100)) swap(a[j],a[j+1]); } } } int main() { string num[maxn]; int i=0,n; while(cin>>num[i]){ i++; } cin>>n; int p[i]; for(int j=0;j<i;j++){ p[j]=stoi(num[j]);//必须是c++11以上 } mysort(p,i); cout<<p[n-1]<<endl; //cout << "Hello world!" << endl; return 0; }