栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

信息学奥赛一本通---第二部分 基础算法 --- 第一章 高精度计算个别题题解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

信息学奥赛一本通---第二部分 基础算法 --- 第一章 高精度计算个别题题解

注:此为c++代码     虽然我的代码无注释,但如想复制,必须完全搞懂代码所对应的题! Dev c++这东西点进来的都有吧,详情见我的另一篇文章。 正式进入题解部分:          (本人小白,大佬们请勿吐槽) 1307:
#include
using namespace std;
char a1[888],b1[888];
int a[888],b[888],c[8888],lena,lenb,bw,jw,lenc;
bool flag;
int main()
{
	cin>>a1>>b1;
	lena=strlen(a1);
	lenb=strlen(b1);
	for(int i=0;i<=lena-1;i++)
	{
		a[lena-i]=a1[i]-'0';
	}
	for(int i=0;i<=lenb-1;i++)
	{
		b[lenb-i]=b1[i]-'0';
	}
	for(int i=1;i<=lenb;i++)
	{
		jw=0;
		for(int j=1;j<=lena+1;j++)
		{
			c[i+j-1]+=a[j]*b[i]+jw;
			jw=c[i+j-1]/10;
			c[i+j-1]%=10;
		}
	}
	lenc=lena+lenb;
	while(c[lenc]==0&&lenc>1) lenc--;
	for(int i=lenc;i>=1;i--)
	{
		cout< 
1308: 
#include
using namespace std;
int a[305],b[305],c[305];
void init(int x[]){
	string s;
	cin>>s;
	x[0]=s.size();
	for(int i=1;i<=x[0];i++){
		x[i]=s[x[0]-i]-'0';
	}
}
void numcpy(int p[],int q[],int wz){
	for(int i=1;i<=p[0];i++) q[i+wz-1]=p[i];
	q[0]=p[0]+wz-1;
}
int numcmp(int a[],int b[]){
	if(a[0]>b[0]) return 1;
	if(a[0]=1;i--){
		if(a[i]>b[i]) return 1;
		if(a[i]0&&a[a[0]]==0) a[0]--;
	}
}
void gjc(int a[],int b[],int c[]){
	int i,tmp[101];
	c[0]=a[0]-b[0]+1;
	for(i=c[0];i>=1;i--){
		memset(tmp,0,sizeof tmp);
		numcpy(b,tmp,i);
		while(numcmp(a,tmp)>=0){
			c[i]++;
			gjj(a,tmp);
		}
	}
	while(c[c[0]]==0&&c[0]>0) c[0]--;
}
void sc(int a[]){
	if(a[0]==0){
		cout<<0;
		return ;
	}
	for(int i=a[0];i>=1;i--){
		cout<
1309:
#include
using namespace std;
int n;
int a[500],b[500],step=0;
char str[500];
void add(int a[],int b[])
{
    int i;
    for(i=1;i<=a[0];i++)
    {
        a[i]+=b[i];
        a[i+1]+=a[i]/n;
        a[i]%=n;
    }
    if(a[a[0]+1]>0)
        a[0]+=1;
}
bool judge(int a[])
{
    int i;
    for(i=1;i<=a[0]/2;i++)
        if(a[i]!=a[a[0]-i+1])
            return false;
    return true;
}
void overturn(int a[])
{
    int i,j;
    b[0]=a[0];
    j=1;
    for(i=a[0];i>=1;i--)
    {
        b[j]=a[i];
        j++;
    }
}
void print(int a[])
{
    int i;
    for(i=a[0];i>=1;i--)
        cout<>n>>str;
    len=strlen(str);
 
    int k=1;
    for(i=len-1;i>=0;i--)
    {
        if('0'<=str[i]&&str[i]<='9')
        {
            a[k]=str[i]-'0';
            k++;
        }
        if('a'<=str[i]&&str[i]<='z')
        {
            a[k]=str[i]-'a'+10;
            k++;
        }
        if('A'<=str[i]&&str[i]<='Z')
        {
            a[k]=str[i]-'A'+10;
            k++;
        }
    }
 
    a[0]=len;
    while(judge(a)==0)
    {
        overturn(a);
        add(a,b);
        step++;
        if(step>30)
            break;
    }
 
    if(step>30)
        cout<<"Impossible"< 
1168: 
#include
using namespace std;
int a[202],b[202],c[202],la,lb,lc,x=0; 
char a1[2000],b1[2000];  
int main ()
{
     
    cin>>a1>>b1;
    la=strlen(a1);
    lb=strlen(b1);
    for(int i=0;i<=la-1;i++)   
    {
        a[la-i]=a1[i]-'0';
    }
    for (int j=0;j<=lb-1;j++)   
    {
        b[lb-j]=b1[j]-'0';
    }
    lc=1;
    while(lc<=la||lc<=lb) 
    {
        c[lc]=a[lc]+b[lc]+x;
        x=c[lc]/10;
        c[lc]%=10;
        lc++;
    }
    c[lc]=x;
    while(c[lc]==0)  
    {
        lc--;
    }
    for(int k=lc;k>=1;k--)   
    {
        cout< 
1169: 
#include
using namespace std;
char a[888],b[888];
int a1[888],b1[888],c[888],lena,lenb,bw,jw,www;
bool flag;
int main()
{
	cin>>a>>b;
	lena=strlen(a);
	lenb=strlen(b);
	for(int i=0;i<=lena-1;i++)
	{
		a1[lena-i]=a[i]-'0';
	}
	for(int i=0;i<=lenb-1;i++)
	{
		b1[lenb-i]=b[i]-'0';
	}
	if(lena=1;i--)
		{
			if(a1[i]=1;i--)
	{
		if(c[i]==0)
		{
			www--;
		}
		else
		{
			break;
		}
	}
	for(int i=www;i>=1;i--)
	{
		cout< 
1171: 
#include
using namespace std;
char a1[888];
int a[888],c[888],lena,d,sb_nmsl_cnm;
int main()
{
	cin>>a1;
	lena=strlen(a1);
	for(int i=0;i<=lena-1;i++)
	{
		a[i]=a1[i]-'0';
	}
	for(int j=2;j<=9;j++)
	{
		d=0;
		for(int i=0;i<=lena-1;i++)
		{
			d=(d*10+a[i])%j;
		}
		if(d==0)
		{
			cout< 
1172: 
#include
using namespace std;
int a[40000],n,len=1,jw;
int main()
{
	cin>>n;
	a[1]=1;
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=len;j++)
		{
			a[j]=a[j]*i+jw;
			jw=a[j]/10;
			a[j]%=10;
		}
		while(jw>0)
		{
			a[++len]+=jw;
			jw/=10;
			a[len]%=10;
		}
	}
	for(int i=len;i>=1;i--)
	{
		printf("%d",a[i]);
	}
	return 0;
}
1174:
#include
using namespace std;
char a1[100000],b1[100000];
int lena,lenb,a[100000],b[100000],c[100000],jw,bw,lenc;
int main()
{
	cin>>a1>>b1;
	lena=strlen(a1);
	lenb=strlen(b1);
	for(int i=0;i<=lena-1;i++)
	{
		a[lena-i]=a1[i]-'0';
	}
	for(int i=0;i<=lenb-1;i++)
	{
		b[lenb-i]=b1[i]-'0';
	}
	for(int i=1;i<=lenb;i++)
	{
		jw=0;
		for(int j=1;j<=lena+1;j++)
		{
			c[i+j-1]+=a[j]*b[i]+jw;
			jw=c[i+j-1]/10;
			c[i+j-1]%=10;
		}
	}
	lenc=lena+lenb;
	while(c[lenc]==0&&lenc>1) lenc--;
	for(int i=lenc;i>=1;i--)
	{
		cout< 
1175: 
#include
using namespace std;
char a1[888];
int b=13,a[888],c[888],lena,d,sb_nmsl_cnm;
int main()
{
	cin>>a1;
	lena=strlen(a1);
	for(int i=0;i<=lena-1;i++)
	{
		a[i]=a1[i]-'0';
	}
	for(int i=0;i<=lena-1;i++)
	{
		c[i]=(d*10+a[i])/b;
		d=(d*10+a[i])%b;
	}
	for(int i=0;i<=lena-1;i++)
	{
		if(c[i]!=0)
		{
			sb_nmsl_cnm=i;
			break;
		}
	}
	for(int i=sb_nmsl_cnm;i<=lena-1;i++)
	{
		cout< 

明天发:

信息学奥赛一本通

1176,1184

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号