此处仅仅是灵活运用一下学过的,并没什么用,
暂时学会七种方法

题目:

输入 俩个(int范围)整数 a,b;

输出 其和

。。。。

代码:

因为循环下只有一个语句,省略了{},当然不推荐这样写,只是为了缩短代码而已。

1.一般写法

#include<stdio.h>
main(){
    int a,b;
    while(scanf("%d %d",&a,&b)!=EOF)
        printf("%d\n",a+b);
}

2.简单去点换行

#include<stdio.h>
main(){int a,b;while(scanf("%d %d",&a,&b)!=EOF)printf("%d\n",a+b);}

3.~取代EOF

  • 简单说明:

~ 是位运算,它是将数据在内存中的每一位(当然是二进制)取反。-1在内存中所有位全部为1,
~(-1)=0,即对-1取非就是0,就会跳出循环。

#include<stdio.h>
main(){
    int a,b;
    while(~scanf("%d %d",&a,&b))
        printf("%d\n",a+b);
}
  1. for取代while
#include<stdio.h>
main(){
    int a,b;
    for(;~scanf("%d %d",&a,&b);printf("%d\n",a+b));
}

5.把int a,b;放入for中

#include<stdio.h>
main(){
	for(int a,b;~scanf("%d %d",&a,&b);printf("%d\n",a+b));
}

6.add函数

#include<stdio.h>
int add(int a,int b)
{
	return a+b;
}
main()
{
	int a,b;
	while(~scanf("%d %d",&a,&b))
		printf("%d\n",add(a,b));
}

7.不同“+”(利用二进制):

  • 分析:
    同为假,异为真!
    所以0和1的异或运算如下:
    0^0 = 0, 1^0 = 1, 0^1 = 1,1^1 = 0
    再看看0和1的二进制加法不考虑进位:
    1+1=0 1+0=1,0+1=1,0+0=0,
    实现两个是相加不用四则运算,根据计算机中的运算不用四则运算那么肯定是位运算了。
    (以下分析来自剑指offer)比如我们计算5+17=22这个结果,世界上,我们可以分为3个步骤计 算,
    第一步各位数相加不进位,此时的结果是12(个位相加不进位是2,十位相加是1),所以结果 是12;
    第二步做进位,5+7有进位,进位值是10;
    第三步是把前两步计算结果加起来。12 + 10 = 22.
    那么运用位运算二进制的数字也可以这么考虑,5是二进制的101,17是二进制的10001。
    试着把计算分为3步走:
    第一步各位相加不进位,得到的结果是10100;
    第二步是记下进位,根据这个例子进位计算结果是10;
    第三步是把前两步计算结果相加得到结果10110.转化为10进制刚好是22。 用二进制计算,
    第一步不考虑进位,即每一位相加 0+0=0,1+1=0,0+1=1,1+0=1。结果符合二进制数据的异或运算。
    第二步只考虑进位运算,0+0,0+1,1+0都不会进位,只有1+1才会进位,结果符合两个数的与运算结果然后向左移动一位。
    第三步,把前两步骤的结果相加,相加步骤仍然是重复前两步骤。直到不产生进位值。
#include<stdio.h>
int Add(int a,int b )
{
	if(b==0)
    {
		return a;
    }
	int sum=a^b;//printf("a^b: %d\n",sum);
    int carry=(a&b)<<1;//printf("<<1 %d\n",carry);
    return Add(sum,carry);
}
main()
{
	int a,b;
	while(~scanf("%d %d",&a,&b))
		printf("%d \n",Add(a,b));
}

8.假装用c++;
从下面的代码可以看到,如果想不用加号实现两个数的相加,
那就需要用到数据之间的强制转换,与[]运算符的应用。
众所周知,数组的数组名就是这个数组的首地址,a[i]=*(a+i),
指针的加法相当于地址加上此时数据类型的字节大小,char类型的大小为1,
所以先将一个数强制转换成地址类型,通过[b]就可以实现不用加号使两个数相加!

#include<iostream>
using namespace std;
int add(int a,int b)
{
	return (int ( &( ( ( char * )a )[b] ) ) );
}
main(void)
{
	int a,b;
	while(cin>>a>>b)
	cout<<add(a,b)<<endl;
}


#include<stdio.h>
int main() {
	int a,b,sum;
	while( ~ scanf("%d %d", &a, &b) ) {
		sum = a - ~b - 1;//~为取反,减法是sum=a+~b-1;
		printf("%d\n", sum) ;
	}
	return 0;
}