1.解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,前面的00不算做有效位。解析后以10进制的数字输出。
如果解析到非法字符串则返回-1
9进制:
9进制的数的范围:0,1,2,3,4,5,6,7,8
9进制的开始为:0V或者0v
9进制的正确实例:0V11 0v564 0V123 0v0784 0V0 0v 0V
9进制的错误实例:0V923 0vt12 00V21 0123
9进制转换为10进制:0V11 -> 10
0v564 -> 463
11进制:
11进制的数的范围:0,1,2,3,4,5,6,7,8,9,A(a)
11进制的开始为:0W或者0w
11进制的正确实例:0W11 0w564 0W123 0w0A8a 0W 0w
11进制的错误实例:0WB923 0wVaA 00W21 0WAx123
11进制转换为10进制:
0W11 -> 12
0w564 -> 675
#include <math.h> #include<iostream> #include <string> using namespace std; void main() { string str; cin>>str; int len=str.length(); char *ch=new char[len]; for (int i=0;i<len;i++) { ch[i]=str[i]; } int iRet=0; if (ch[0]=='0'&&(ch[1]=='v'||ch[1]=='V')) { for (int i=len-1;i>1;i--) { if (ch[i]>'8'||ch[i]<'0') { cout<<-1; return; } iRet+=(ch[i]-'0')*((int)pow(9.0,len-1-i)); } } else if (ch[0]=='0'&&(ch[1]=='w'||ch[1]=='W')) { for (int i=len-1;i>1;i--) { if (ch[i]!='a'&&ch[i]!='A'&&(ch[i]>'9'||ch[i]<'0')) { cout<<-1; return; } if (ch[i]=='a'||ch[i]=='A') { ch[i]='0'+10; } iRet+=(ch[i]-'0')*((int)pow(11.0,len-1-i)); } } else { cout<<-1; return; } cout<<iRet; }
2.一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。
#include <iostream> #include <vector> using namespace std; void main() { int putnum=0; int outnum=0; cin>>putnum; vector<int>p(putnum+1,0); for (int i=1;i<putnum+1;i++) { for (int index=i;index<putnum+1;index+=i)//idex步长和idex初始化 { p[index]=!p[index]; } } for (int i=1;i<putnum+1;i++) { if (p[i]==1) { outnum++; } } cout<<outnum; }