首先B题
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxn 100000
char a[100],b[100];
int main()
{
int i,j;
int s1,s2,s;
while(~scanf("%s%s",a,b))
{
s1=0;
s2=0;
s=0;
for(i=0;a[i]!='\0';i++)
{
s1+=a[i]-48;//ASII码,‘0’,把字母转换为数字
}
for(j=0;b[j]!='\0';j++)
{
s2+=b[j]-48;
}
s=s1+s2;
printf("%d\n",s);
}
return 0;
}题意一开始把我绕进去了,其实就是求各位数之和
2、D题
#include<stdio.h>
#include<math.h>
int main()
{
int t;
int a,b,c,i;
scanf("%d",&t);
int s;
while(t--)
{
s=0;
scanf("%d%d%d",&a,&b,&c);
if(b==0)
printf("0\n");//wa是因为忽略了b可以是0的条件
else
{
for(i=1;;i++)
{
if(i*a>b*c)
{
printf("%d\n",i);
break;
}
}
}
}
return 0;
}
3、#include<stdio.h>
#include<math.h>
int main()
{
int t;
int a,b;
scanf("%d",&t);
int s;
while(t--)
{
s=0;
scanf("%d%d",&a,&b);
s=fabs(a)+fabs(b);
printf("%d\n",s);
}
return 0;
}//很简单,一次过,直接用绝对值fabs
4、还有20进制转化的问题
首先是要把两个数反转(20进制转化为十进制进行后面的加法-‘0’)
再依次相加各位数,从个位开始,如果有进位,就直接进位加到后一位上自己-20
这里有一个flag问题,若==0的话,就flag--
max+2
相加和
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[10000],b[10000];
int aa[10000],bb[10000],cc[10000];
while(~scanf("%s%s",a,b))
{
memset(aa,0,sizeof(aa));
memset(bb,0,sizeof(bb));
memset(cc,0,sizeof(bb));
int len1=strlen(a),len2=strlen(b);
for(int i=len1-1;i>=0;i--)
{
if(a[i]>='0'&&a[i]<='9')aa[len1-1-i]=a[i]-'0';
else if(a[i]>='a'&&a[i]<='j')aa[len1-1-i]=a[i]-'a'+10;
}
for(int i=len2-1;i>=0;i--)
{
if(b[i]>='0'&&b[i]<='9')bb[len2-1-i]=b[i]-'0';
else if(b[i]>='a'&&b[i]<='j')bb[len2-1-i]=b[i]-'a'+10;
}
int len=max(len1,len2);
for(int i=0;i<len;i++)
{
cc[i]+=aa[i]+bb[i];
if(cc[i]>=20)
{
cc[i]-=20;
cc[i+1]++;
}
}
int flag=len+2;
while(cc[flag]==0&&flag>=0)flag--;
if(flag<0)cout<<"0\n";
else{
for(int i=flag;i>=0;i--)
{
if(cc[i]<=9)cout<<cc[i];
else printf("%c",cc[i]-10+'a');
}
cout<<endl;
}
}
return 0;
}
5、J题,一开始也没有正确理解题意
#include<stdio.h>
//using namespace std;
int pd(int x,int y)
{
return y==0?x:pd(y,x%y);//求得是最大公约数,这个需要记住
}
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b))
{
int t=0;
if(a==b){printf("0\n");continue;}//要记住不是break,如果是break,直接跳出循环,不能再输入了
int c=pd(a,b);
a/=c;b/=c;//这样就求出最大的
if(a%2==0)
{
while(a%2==0)
{
a/=2;t++;
if(a%2)break;
}
}
if(a%3==0)
{
while(a%3==0)
{
a/=3;t++;
if(a%3)break;
}
}
if(b%2==0)
{
while(b%2==0)
{
b/=2;t++;
if(b%2)break;
}
}
if(b%3==0)
{
while(b%3==0)
{
b/=3;t++;
if(b%3)break;//四种情况
}
}
if(a==b)printf("%d\n",t);
else printf("-1\n");
}
return 0;
}