目录 |
switch...case 16进制转换成8进制
-
语法
switch(值){ case 值1: 匹配值1 case 值2: 匹配值2 }
借助二进制进行转换:
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
using namespace std;
void transform1(string &s,string &t){
for(int i=0;i<s.size();i++){//将16进制转换成2进制
switch(s[i]){
case '0':t+="0000";break;
case '1':t+="0001";break;
case '2':t+="0010";break;
case '3':t+="0011";break;
case '4':t+="0100";break;
case '5':t+="0101";break;
case '6':t+="0110";break;
case '7':t+="0111";break;
case '8':t+="1000";break;
case '9':t+="1001";break;
case 'A':t+="1010";break;
case 'B':t+="1011";break;
case 'C':t+="1100";break;
case 'D':t+="1101";break;
case 'E':t+="1110";break;
case 'F':t+="1111";break;
}
}
}
void transform2(string &t,string &result){//将二进制装换成8进制
while(t.size()%3!=0){
t='0'+t;//在string容器前面加
}
for(int i=0;i<t.size();i+=3){
result+= (t[i]-'0')*4+(t[i+1]-'0')*2+(t[i+2]-'0')*1+'0';//3位一转换
}
}
int main(){
int n;
cin>>n;
while(n>0){
string s="";
cin>>s;
string result="",t="";
transform1(s,t);
transform2(t,result);
int count=0;
int i=0;
while(result[i]=='0'){
count++;//把前位的0给去除
i++;
}
result.erase(result.begin(),result.begin()+count);
cout<<result<<endl;
n--;
}
}
16进制转10进制
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
void transform1(string &s,string &t){
for(int i=0;i<s.size();i++){
switch(s[i]){
case '0':t+="0000";break;
case '1':t+="0001";break;
case '2':t+="0010";break;
case '3':t+="0011";break;
case '4':t+="0100";break;
case '5':t+="0101";break;
case '6':t+="0110";break;
case '7':t+="0111";break;
case '8':t+="1000";break;
case '9':t+="1001";break;
case 'A':t+="1010";break;
case 'B':t+="1011";break;
case 'C':t+="1100";break;
case 'D':t+="1101";break;
case 'E':t+="1110";break;
case 'F':t+="1111";break;
}
}
}
void transform2(string &t,long long &nums){
int length=t.size();
for(int i=length-1;i>=0;i--){
nums+=(t[i]-'0')*pow(2,length-i-1);
}
}
int main(){
string s,t;
long long nums=0;//用int 会溢出
cin>>s;
transform1(s,t);
//cout<<t;
transform2(t,nums);
cout<<nums;
}
打板子不知道我在想什么这肯定会溢出的东西我一开始用的int
10进制转16进制
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
void transfrom1(long long &s,string &t){
while(true){
if(s%16>=10){
t+=s%16-10+'A';
}
else{
t+=s%16+'0';
}
s=s/16;
if(s==0){
break;
}
}
reverse(t.begin(),t.end());
cout<<t;
}
int main(){
long long s;
string t;
cin>>s;
transfrom1(s,t);
}
特殊回文数
题目要求是5位和6位的且按顺序输出
就暴力欧克
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=9;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++){
if(2*i+2*j+k==n){
cout<<i<<j<<k<<j<<i<<endl;
}
}
}
}
for(int i=1;i<=9;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++){
if(2*i+2*j+2*k==n){
cout<<i<<j<<k<<k<<j<<i<<endl;
}
}
}
}
}
回文数
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
int main(){
for(int i=1;i<=9;i++){
for(int j=0;j<=9;j++){
cout<<i<<j<<j<<i<<endl;
}
}
}
特殊的数字
暴力有点爽啊
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
int main(){
for(int i=1;i<=9;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++){
if((pow(i,3)+pow(j,3)+pow(k,3))==i*100+j*10+k){
cout<<i<<j<<k<<endl;
}
}
}
}
}
杨辉三角
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
int a[100][100];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
a[i][0]=1;
int j=0;
for(j=1;j<i;j++){
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
a[i][j]=1;
}
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
01字串
啊这波我也挺离谱的
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
int main(){
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
for(int k=0;k<2;k++){
for(int l=0;l<2;l++){
for(int p=0;p<2;p++){
cout<<i<<j<<k<<l<<p<<endl;
}
}
}
}
}
}
核心思想是C=A+B
C对M余数=(A%M+B%M)%M;
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
#include<bitset>
using namespace std;
int main(){
long long n;
cin>>n;
long long sum[n];
sum[0]=1;
sum[1]=1;
for(int i=2;i<n;i++){
sum[i]=(sum[i-1]%10007+sum[i-2]%10007)%10007;
}
cout<<sum[n-1];
}
圆的面积
有个问题就是cout如何保留小数
cout<<fixed<<setprecision(7)<<s;
保留小数点后七位
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
#include<bitset>
#include<iomanip>
using namespace std;
int main(){
int r;
double PI=3.1415926535897932;
cin>>r;
double s;
s=PI*r*r;
cout<<fixed<<setprecision(7)<<s;
}
序列求和
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
#include<bitset>//进制转换用的
#include<iomanip>//保留小数用的
using namespace std;
int main(){
long long n;
cin>>n;
long long sum;
sum=((n+1)*n)/2;
cout<<sum;
}
字母图形
#include<iostream>
#include<algorithm>
#include<stack>
#include<vector>
#include<string>
#include<math.h>
#include<bitset>//进制转换用的
#include<iomanip>//保留小数用的
using namespace std;
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<char('A'+abs(i-j));
}
cout<<endl;
}
}