例1-2 三位数反转
题目:程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7;输入740,输出应该是47。
分析:用%10可以得到个位数,用/10%10可以得到十位数,用/100可以得到百位数。
输入样例:
123
输出样例:
321
源码:
#include<stdio.h> int main() { int n,a,b,c; scanf("%d",&n); a=n/100; //原百位 b=n/10%10; //原十位 c=n%10; //原个位 printf("%d",c*100+b*10+a); return 0; }
另一种:
#include<stdio.h> int main() { int n; scanf("%d",&n); if(n%100==0) //末尾两个0 printf("%d",n/100); else if(n%10==0) //末尾一个0 printf("%d%d",n/10%10,n/100); else printf("%d%d%d",n%10,n/10%10,n/100); return 0; }
例1-3 不借助第三者交换变量
#include<stdio.h> int exchange_2_withoutOthers() { int a,b; scanf("%d%d",&a,&b); a = a + b; b = a - b; a = a - b; printf("%d %d\n",a,b); return 0; }
例1-4 鸡兔同笼
#include<stdio.h> int chicken_rabbit() { int n,m,x,y; //n是鸡兔总数,m是总腿数,x是鸡的数目,y是兔的数目 scanf("%d%d",&n,&m); x = 2*n-m/2; //解方程组得 y = m/2-n; if(m%2==1||x<0||y<0) //若m是奇数则得到的x,y不是整数(因为m是总腿数所以从实际出发也容易理解),同时x,y必须是非负的 { printf("No answer\n"); } else printf("%d %d\n",x,y); return 0; }
判断一个数是不是素数(质数)
int is_prime(int n) { int i; for(i=2;i*i<=n;i++) //n不能太大,因为i*i有可能溢出 if(n%i==0) return 0; //合数 return 1; //素数(质数) }
辗转相除法求最大公约数
#include<stdio.h> int main() { int m,n,t; scanf("%d%d",&m,&n); while(n!=0) { t=m%n; m=n; n=t; } printf("%d",m); return 0; }