1.十进制数转二进制数
很常规的一个题,取余存进数组然后输出就好了。除二反序取余法(十进制转二进制)的判断条件是商不为0,那么只要商为零,就是循环结束的标志。
#include "stdio.h"
void binary(int n)
{
int ans1, ans2;
long long a[50000];
ans1=n/2;
ans2=n%2;
a[0]=ans2;
n=ans1;
int i=1;
while(ans1)
{
ans1=n/2;
ans2=n%2;
a[i++]=ans2;
n=ans1;
}
int j;
for(j=i-1;j>=0;j--)
printf("%lld",a[j]);
printf("\n");
}
int main()
{
int n;
scanf("%d", &n);
binary(n);
return 0;
}
2. 求函数值
讲过写过的,这里直接上代码了
#include "stdio.h"
int g(int x)
{
if(x<2) return x;
if(x>=2&&x%2==0) return (g(x/2)+1);
if(x%2!=0) return x;
}
int f(int x)
{
if(x<2) return x;
if(x>=2&&x%2==0) return g(x/2)*2 ;
if(x>=2&&x%2!=0) return g((x-1)/2);
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",f(n));
return 0;
}
3. 二进制加法
上次考过的,不多讲了
#include "stdio.h"
#include "string.h"
main()
{ int a[100]={0},b[100]={0},c[100]={0};
char s[101];
int i=0,n1=0,n2=0,max=0,e=0;
gets(s);
n1=strlen(s);
for(i=n1-1;i>=0;i--) a[n1-1-i]=s[i]-'0';
gets(s);
n2=strlen(s);
for(i=n2-1;i>=0;i--) b[n2-1-i]=s[i]-'0';
if(n1>n2) max=n1;
else max=n2;
for(i=0;i<=max;i++)
{ c[i]=(a[i]+b[i]+e)%2;
e=(a[i]+b[i]+e)/2;
}
if(c[max]>0) printf("%d",c[max]);
for(i=max-1;i>=0;i--)
printf("%d",c[i]);
}
4 [填空]函数实现求字符串长度
常规题,循环判断,循环条件即为是否当前字符为’\0’, 每次循环count++即可。
int f(char *s)
{
int i=0;
while(*s!='\0')
{
i++;
s++;
}
return i;
}
int main()
{
char s[80];
int i;
scanf("%s", s);
i=f(s);
printf("%d", i);
}
5 计算组合数
旧题,注意g函数在f函数之前就好了
上代码
#include <stdio.h>
int jie(int n)
{
int ans=1;
int i;
for(i=1;i<=n;i++)
ans*=i;
return ans;
}
int zuhe(int n1, int n2)
{
int ans=jie(n1)/(jie(n1-n2)*jie(n2));
return ans;
}
int main()
{
int a, b;
scanf("%d%d",&a,&b);
//int ans=zuhe(a,b);
printf("%d\n",zuhe(a,b));
}
6 因子和
em。。。又是写过的题,这次应该会了吧。
两重循环
外层遍历一万以内的数
内层对每一个数求因子和
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i, j;
for(i=1;i<=10000;i++)
{
int sum=0;
for(j=1;j<i;j++)
{
if(i%j==0)
sum+=j;
}
if(sum==n)
printf("%d\n",i);
}
return 0;
}
这些题都是oj高程里的题或者是考过的题,今天的题如果没有全过的话要下去好好复习一下。