1.辗转相除法
#include<stdio.h>
int main()
{
int a, b,c,r;
scanf("%d %d", &a, &b);
if (a < b)
{
c = a;
a = b;
b = c;
}
while (b != 0)
{
r = a%b;
a = b;
b = r;
}
printf("%d\n", a);/*a为上次循环的b*/
return 0;
}
2.输入一行字符,以回车符作为输入结束的标志。统计其中英文字母、数字字符和其他字符的个数。
输入:多个字符,以回车符结束,回车符不作为有效字符。有效字符个数不超过100。
输出:输出分3行,格式见输出样例。
#include<stdio.h>
int main()
{
char x;
int a=0, b=0, c=0,i=0;
while (scanf("%c", &x), x != '\n'&&i<=100)/*(条件处用&&连接)*/
{
if ((x <= 'z'&&x >= 'a') || (x <= 'Z'&&x >= 'A'))
a++;
else if (x >= '0'&&x <= '9')
b++;
else
c++;
i++;
}
printf("letter:%d\n", a);
printf("digit:%d\n", b);
printf("other:%d\n", c);
return 0;
}
/*注意:while内输入与条件不能合并 条件必须分离
如果改为x=getchar()!='\n'则x无法赋值*/
3.1.0在前与在后i
#include <stdio.h>
int main()
{
int a = 3, b = 2;
printf("%.1f\n", 1.0*a / b); /*此处自动转化为double类型 结果为1.5*/
printf("%.1f\n", a / b*1.0);
return 0; /*此处a / b已经损失小数结果为1*/
}
4. oj 1063;
输入两个正整数,输出其最大公约数和最小公倍数。
输入
输入两个正整数n和m(n,m<=1000000)。输入保证最终结果在int范围内。
输出
输出两个整数,用空格隔开。表示m和n的最大公约数和最小公倍数。
#include <stdio.h>
int main()
{
int a, b, c, r, d, e, f;
scanf("%d %d", &a, &b);
if (a<b)
{
c = a;
a = b;
b = c;
}
e = a;
f = b;
d = a;
while (b != 0)
{
r = a%b;
a = b;
b = r;
}
printf("%d", a);
for (;; d++)
{
if (d%e == 0 && d%f == 0)/*还可以用e/a*f 代替 注意:先除后乘!!*/
break;
}
printf(" %d", d);
return 0;
}
5:oj 1067
某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示339,汽车走过1公里之后,该里程表显示350。
输入
输入一个整数num,表示里程表显示的数值,1 < num < 1000,且一定不含整数4。
输出
输出一个整数,为该汽车实际行驶的公里数。例如,如果该里程表显示55,则实际走过的公里 数是40。
#include <stdio.h>
#include <math.h>
int main()
{
int str[10];
int i = 0, a, b, z = 0, num = 0,d=1;
scanf("%d", &a);
while (a != 0)
{
str[i] = a % 10;/*将每一位数字放入str[]中*/
a = a / 10;
i++;/*计算位数 用作确定循环次数*/
}
for (b = 1; b <= i; b++)
{
if (str[z] <= 3)
{
num += str[z] * d;/*位数大小小于三 此为位数就是此数*/
d *= 9;
z++;
}
else if (str[z] >= 5)/*大于4应该减去跳过的位数*/
{
num += (str[z] - 1)*d;
d *= 9;
z++;
}
}
printf("%d\n", num);
return 0;
}
或者累加 遇见位数上有4就跳过 如图
#include <stdio.h>
#include <math.h>
int main()
{
int num,m=0;
scanf("%d", &num);
for (int i = 1; i <= num; i++)
{
if(i % 10 != 4 && (i / 10) % 10 != 4 && (i / 100) % 10 != 4)/*判断各位是否有4*/
m++;
}
printf("%d\n", m);
return 0;
}