--周记(杂)2018年12月30日

1.宏替换不占用运行时间。宏替换是在编译时,编译器完成的。占用编译时间。
编译时,编译器会将代码中的宏用对应定义好的代码进行直接替换,然后再对源代码进行编译。
所以宏比函数在运行时更快,因为它不用像函数调用时,要对现有数据进行入栈保存,运行完后,在出栈恢复;它是直接编译好的代码。
2.将运算符和变量结合在一起,成为表达式。
3.小光棍shu
最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数。他已经知道了第一个小光棍数是471,471的三次方是104487111,现在他想知道第m(m<=10000000000)个小光棍数是多少?

本题只要最后是471即可);

#include <stdio.h>
#include <stdlib.h>
#define LL long long
int main()
{
    LL t,i,j,k;
    LL m,n;
    scanf("%lld",&t);
    for(i=0;i<t;i++){
        scanf("%lld",&m);
        printf("%lld\n",471+1000*(m-1));
    }
}

4.编写一个C程序,实现两个分数的加减法
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+“或者”-"。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 100

int f1(int k,int t) //寻找最大公因数
{
	int m,n,i,j;
	
	for(i=k;i>=1;i--)
		if(k%i==0&&t%i==0) break;
	return i;
}

int main()
{
	int t,i,j,k;
	int m,n;
	char s[N];
	char *p;
	int a,b,c,d;
	
	while(scanf("%s",s)!=EOF)
	{
		p=s;
		for(i=1;*p;i++) //给a,b,c,d赋值,并且给找正负(m); 
		{
			switch(i)
			{
				case 1:a=*p-48;break;
				case 3:b=*p-48;break;
				case 4:m=*p;break;
				case 5:c=*p-48;break;
				case 7:d=*p-48;break;
			}
			p++;
		}
		
		if(m==43)
			k=a*d+c*b;
		else if(m==45)
			k=a*d-c*b;
		t=b*d;
		
		/*printf("a=%d\n",a);
		printf("b=%d\n",b);
		printf("m=%c\n",m);
		printf("c=%d\n",c);
		printf("d=%d\n",d);
		printf("k=%d\n",k);
		printf("t=%d\n",t);
		system("pause");*/
		
		if(k>0){
			if(k<t){
				n=f1(k,t);
				if(n==1)
				printf("%d/%d\n",k,t);
				else
				printf("%d/%d\n",k/n,t/n);
			}
			else if(k>t){
				n=f1(t,k);
				if(n==1)
				printf("%d/%d\n",k,t);
				else if(n==t)
				printf("%d\n",k/t);
				else
				printf("%d/%d\n",k/n,t/n);
			}
			else
			printf("1\n");
		}
		else if(k<0){
			if(fabs(k)<t){
				n=f1(fabs(k),t);
				if(n==1)
				printf("%d/%d\n",k,t);
				else
				printf("%d/%d\n",k/n,t/n);
			}
			else if(fabs(k)>t){
				n=f1(t,fabs(k));
				if(n==1)
				printf("%d/%d\n",k,t);
				else if(n==t)
				printf("%d\n",k/t);
				else
				printf("%d/%d\n",k/n,t/n);
			}
			else
			printf("-1\n");
		}
		else
		printf("0\n");
		/*printf("n=%d\n",n);
		system("pause");*/
	}
	
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值