C语言自整理*精华语句*

                               分解整数的各个位for(;m;m/=10);

条件①:可根据题目需要自行发挥

条件②:以整数 m 为表达式,当m/=10不为0时持续循环,当m为0时便已经循环了m的各位数

条件③:每次循环表达式m/=10可删去整数m的末位数
关键   :在循环内可利用表达式 m%10 以获取整数m的末位数***

#include<stdio.h> 
int main()
{
    int n[10],i,m;	
    for(i=0;m;m/=10,i++) n[i]=m%10;   //将整数 m 的各位数 自右向左 赋给了数组 n 的各个元素 
    return 0;
}

利用上述方法可以获取各位数,故而在for(;m;m/=10)的基础上,可以将整数m逆转,如123变为321

   scanf("%d",&a); 	
   for(t=a,b=0;t;t/=10) b=b*10+t%10;         //利用整数分解,逆转a为b

                                     判断奇偶 if(n&1);else;

 &是位与操作符,n&1是将n的二进制形式与00000000 00000001按位做与操作。这时,只要n的最右边一位是1,结果就不   是0,为true,条件成立。所以这句话实际上就是if(n%2==1)

#include <stdio.h>
int main()
{
	int n;
	while(~scanf("%d",&n)){
	    if(n&1) printf("奇数\n");
	    else printf("偶数\n");
    }
	return 0;
}

                            %[*][输入数据宽度][长度]类型 %*c

“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。

%*c作用时读取输入流中数字后的一个字符,并丢弃,使得后面的输入函数不能读到那个字符。

                                               1867: n-1位数

                                                             时间限制: 3 Sec  内存限制: 64 MB

题目描述

已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。

输入

第一行为M,表示测试数据组数。 接下来M行,每行包含一个测试数据。

输出

输出M行,每行为对应行的n-1位数(忽略前缀0)。如果除了最高位外,其余位都为0,则输出0。

样例输入

4
1023
5923
923
1000


样例输出

23
923
23
0

基础做法:

#include<stdio.h>                 //1867: n-1位数
int main()
{                                 // 
	int n[6],i,t,j,m,a,b;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&m);
		for(i=0;m;m/=10){            //将 m 各位数自后向前赋给数组 n 
			n[i]=m%10;
			i++;
		}
		a=0;
		for(j=0;j<i-1;j++){          //得到反向的答案 a 
			a=a*10+n[j];
		}
		for(b=0;a;a/=10) b=b*10+a%10; //逆转 a 为 b 即正向n-1位数
		printf("%d\n",b);
	} 
	return 0; 
} 

进阶做法:

#include<cstdio>
int main()
{
	int n,m;
	scanf("%d",&n);
	while(n--)
	{
		scanf("\n%*c%d",&m);              //利用%c跳过了\n后输入的字符,即输入整数的首位
		printf("%d\n",m);                 //直接输出所得结果
	}
}           

                        跳出多重循环 goto mark;break mark;

#include <stdio.h>
int main()
{
	while(1){
		for(;;){
			goto mark;
		}  
		mark:                //在这做一个标记mark
		printf("sign\n");
	}
	return 0;
} 

输出结果为不断循环输出的字符sign,可见函数通过goto mark;跳出了for循环,从而不断循环while;

                        输入一串字符 scanf("%[^\n]%*c",str);

读入一行字符串,而这串字符里面可能有空格、制表符等空白字符,如果直接用%s是不可以的,于是有些人就想到用gets(),但由于gets很难控制一般不推荐使用,所以用%[^\n]就可以很好的解决这个问题了,^表示"非",即读入其后面的字符就结束读入。

详情链接 关于 scanf("%[^\n]%*c",str);

 

猜你喜欢

转载自blog.csdn.net/qq_30007603/article/details/81153026