系列文章目录
洛谷 循环题单 P1307 数字反转P1980 计数问题之多重循环解决数学问题
题目概述
P1307 数字反转
题目描述
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入格式
一个整数 NN
输出格式
一个整数,表示反转后的新数。
输入输出样例
输入 #1复制
123
输出 #1复制
321
输入 #2复制
-380
输出 #2复制
-83
说明/提示
数据范围
-1,000,000,000≤N≤1,000,000,000−1,000,000,000≤N≤1,000,000,000。
noip2011普及组第一题
P1980 计数问题
试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 11 出现了 44 次。
输入格式
22个整数n,xn,x,之间用一个空格隔开。
输出格式
11个整数,表示xx出现的次数。
输入输出样例
输入 #1复制
11 1
输出 #1复制
4
说明/提示
对于 100\%100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 91≤n≤1,000,000,0≤x≤9。
源代码
#include<stdio.h>
int main()
{
int i,j,k;
int a;
scanf("%d",&a);
if(a==0)//排除0的情况
printf("0");
else
if(a<0)//如果a小于0,先使它为正数 ,最后再加符号
{
a=-a;
printf("-");
}
while(a%10==0)//同另一题的分析
a/=10;
while(a)//while()括弧里的值是一个真假表达式 也就是true 或false 这里的a只要不为零就是true 为零或小于零就是false
{
printf("%d",a%10);
a/=10;
}
return 0;
}
#include<stdio.h>
int main()
{
int i,k,a,b;
int count=0;
scanf("%d%d",&a,&b);//输入题目给的问题
for(i=1;i<=a;i++)//从1开始一个一个数开始筛选
{
int j=i;//保证i可以正常循环,不被干扰
while(j>0)/*重点(当时我的疑惑是11这种两位数中的个位数可以取余十位数是怎么看出来的)
下面循环很明显表明了除十余数为b时count自加,而当j/10时整数向下取整返回while循环*/
{
k=j%10;
if(k==b)
count++;
j/=10;
}
}
printf("%d",count);
return 0;
}
总结
用while循环解决不需要自加的循环数学问题