今天讲初等数论。我听得一脸懵逼。都只是把模板记住了,概念复习了一边,但还是不会用。
模板:while(n>0)//求n的每位数字
{
x=n%10; n/=10;
}
int s=0;//统计n的位数
while(n>0)
{
s++; n/=10;
}
int s=0;//统计n的数字和
while(n>0)
{
s+=n%10; n/=10;
}
int s=0;//算n的逆序数
while(n>0)
{
s=s*10+n%10; n/=10;
}
int s=0,m=n;//判断n是否为回文数
while(n>0)
{
s=s*10+n%10; n/=10;
return s==m;
}
int s=0,m=n;//判断n在b进制下是否为回文数
while (n>0)
{
s=s*b + n%b; n/=b;
}
return s==m;
今天刷的题比较少。大概只刷了5道题。
进制转换是模板题就是实现两种不同进制之间的数据转换。
#include<bits/stdc++.h>
using namespace std;
char s[110000000]={};
int main()
{
int n,m,x=1;
string a;
long long l=0;
cin>>n>>a>>m;
for(int i=0;i<a.size();i++)
{
if(a[i]>='0'&&a[i]<='9')
l=int(a[i]-'0')+l*n;//不高于十
else l=l*n+int(a[i]-'A'+10);//高于十
}
while(l>0)
{
if(l%m<10)
s[x]=char('0'+l%m);
else s[x]=char('A'+l%m-10);
l/=m;
x++;
}
for(int i=x-1;i>=1;i--)
cout<<s[i];
return 0;
}
数据统计就是将不同进制的数统计起来,用10进制输出。 就是x进制转10进制+累加。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a,c[110]={},l=0;
string b;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a>>b;
for(int j=0;j<b.size();j++)//转10进制
{
if(b[j]>='0'&&b[j]<='9')
c[i]=c[i]*a+int(b[j]-'0');
else c[i]=c[i]*a+int(b[j]-'A'+10);
}
}
for(int i=1;i<=n;i++)//累加
l+=c[i];
cout<<l<<endl;
}
进制的题还好一点,数论的题超级难。我都要看别人的程序后知道思路了才能打出来。
连续数和是是个数求x个连续正整数之和。看起来很简单,三重循环枚举就好了,但数巨大,一重循环都要超时。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x,y,a,b;
bool t=1;
cin>>n;
for(int i=sqrt(1.0*2*n);i>=2;i--)
{
if((2*n)%i==0)
{
y=i;
x=(2*n)/i;
if((x+y-1)%2==0)//两数比为一奇一偶,如此x-y比为奇数
{
b=(x+y-1)/2;//由(a+b)和(a-b+1)可得,即x,y;
a=x-b;
if(a<=0||b<=0) continue;//没有负数
t=0;
for(int j=a;j<b;j++)
cout<<j<<' ';
cout<<b<<endl;
}
}
}
if(t)
cout<<"NONE";
}