没想到刷完上百道题以后,遇到这种题,我首先想到的依然是利用双指针然后暴力输出,判断回文不难,进制转换也不难,能让我的代码写到100多行主要是我不懂什么时候>=10的数需要转化成字母输出
寒假每日一题:1346回文平方,一旦写超过120行的代码,我就知道我的这种做法与AC无缘了
#include<iostream>
#include<vector>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int b;
cin>>b;
if(b==10)//十进制不用转换
{
for(int i=1;i<=300;i++)
{
// if(i==11)
// {
vector<int> a;
int t=i*i;
while(t!=0)
{
int temp=t%10;
a.push_back(temp);
t/=10;
}
bool flag=true;
for(int j=0,k=a.size()-1;j<a.size();j++)
{
while(j<k&&j+k==a.size()-1)
{
if(a[j]==a[k])
{
// cout<<a[j]<<" "<<a[k]<<"1"<<endl;
k--;
}
else
{
// cout<<a[j]<<" "<<a[k]<<"2"<<endl;
flag=false;
break;
}
}
}
if(flag) cout<<i<<" "<<i*i<<endl;
//}
}
}
else
{
for(int i=1;i<=300;i++)
{
int ans=i*i;
vector<int> a;
while(ans!=0)
{
int temp=ans%b;
a.push_back(temp);
ans/=b;
}//进制转换
ans=i;
//reverse(a.begin(),a.end());
bool flag=true;
for(int j=0,k=a.size()-1;j<a.size();j++)
{
while(j<k&&j+k==a.size()-1)
{
if(a[j]==a[k])
{
// cout<<a[j]<<" "<<a[k]<<"1"<<endl;
k--;
}
else
{
// cout<<a[j]<<" "<<a[k]<<"2"<<endl;
flag=false;
break;
}
}
}
if(flag)
{
vector<int>c;
int t=ans;
while(ans!=0)
{
int temp=ans%b;
c.push_back(temp);
ans/=b;
}
int sum=0,k=0;
for(int i=c.size()-1;i>=0;i--)
{
sum=sum+c[i]*pow(b,k);
k++;
}
if(sum>=10&&sum<=15)
{
if(sum==10) cout<<'A';
if(sum==11) cout<<'B';
if(sum==12) cout<<'C';
if(sum==13) cout<<'D';
if(sum==14) cout<<'E';
if(sum==15) cout<<'F';
}
else
{
vector<int>d;
while(t!=0)
{
int temp=t%b;
d.push_back(temp);
t/=b;
}
reverse(d.begin(),d.end());
for(int i=0;i<d.size();i++)
cout<<d[i];
}
cout<<" ";
for(int i=0;i<a.size();i++)
{
sum=a[i];
if(sum>=10&&sum<=15)
{
if(sum==10) cout<<'A';
if(sum==11) cout<<'B';
if(sum==12) cout<<'C';
if(sum==13) cout<<'D';
if(sum==14) cout<<'E';
if(sum==15) cout<<'F';
}
else
{
cout<<a[i];
}
}
cout<<endl;
}
}
}
}
养成用函数分段实现每段程序的习惯也许更好
对,我之前刷完很多题都有这种体会,但是有段时间不用函数,就又忘了模块化思维
暴力,其实不用这么麻烦的
学一下y总的手法,优美啊
打卡了