huangyanjun123456 @ 2023-04-08 16:46:49
P1015 [NOIP1999 普及组] 回文数 不会这题
要求: 1.用c++ 2.只可以用主函数 3.代码要规范
by xxc123 @ 2023-04-16 13:55:47
@huangyanjun123456 不过只写main()代码有点丑长 求关注
#include<stdio.h>
#include<string.h>
int main()
{
int p=1,ans=0,i,j,n,x,gg=0,jj,a[105],b[105];
char c[105];
scanf("%d",&n);
scanf("%s",c);
j=0;
while(c[j]!=0)
{
if((c[j]>='0')&&(c[j]<='9'))a[j+1]=c[j]-'0';
else a[j+1]=c[j]-'A'+10;/*先转化一下,方便进行后面的加法运算*/
j++;
}
while(ans<=30)/*题目要求*/
{
gg=0;
i=1;
while(i<=j)
{
x=a[j-i+1]+a[i]+gg;
gg=x/n;/*gg表示进位*/
b[j-i+1]=x%n;
i++;
}
if(gg!=0)b[0]=gg;
if(gg!=0)
{
for(i=1;i<=j+1;i++)a[i]=b[i-1];
j++;
}
else for(i=1;i<=j;i++)a[i]=b[i];
ans++;
i=1;
jj=j;
p=1;
while(i<=jj/*判断是否为回文数*/
{
if(a[i]!=a[jj])p=0;
i++;
jj--;
}
if(p)
{
printf("STEP=%d",ans);
return 0;
}
}
printf("Impossible!");
return 0;
}
原来我写法
#include<iostream>
#include<cstring>
using namespace std;
char c[101];
int s1[201],s2[201],s[201],len;
void add(int n)
{
int x=0,k=201;
for(int i=len-1;i>=0;i--)
{
s[--k]=s1[i]+s2[i]+x;
x=s[k]/n;
s[k]%=n;
}
if(x!=0)
{
s[--k]=x;
len++;
}
for(int i=0,j=k;j<=200;i++,j++)
s1[i]=s[j];
}
void charTOint(int n)
{
for(int i=0;i<len;i++)
{
if(c[i]>='0'&&c[i]<='9')
s1[i]=c[i]-'0';
else if(c[i]>='a'&&c[i]<='z')
s1[i]=c[i]-'a'+10;
else
s1[i]=c[i]-'A'+10;
}
}
void turn()
{
for(int i=0;i<len;i++)
s2[i]=s1[len-1-i];
}
bool hws()
{
for(int i=0,j=len-1;i<j;i++,j--)
if(s1[i]!=s1[j])
return false;
return true;
}
int main()
{
int n;
cin>>n>>c;
len=strlen(c);
charTOint(n);
int step=0;
while(step<=30)
{
if(hws())
{
cout<<"STEP="<<step<<endl;
return 0;
}
step++;
turn();
add(n);
}
cout<<"Impossible!"<<endl;
return 0;
}
by huangyanjun123456 @ 2023-04-16 20:08:19
我也五年级你好厉害啊
by huangyanjun123456 @ 2023-04-16 20:09:56
我都不会用函数
by huangyanjun123456 @ 2023-04-17 21:44:01
@xxc123