给出一个不多于5位的正整数,要求:1.求出他是几位数;2.分别输出每一位数字;3.按逆序输出各位数字 例:原数为321,则输出为123

1.求出他是几位数。

用12345举例子,这是个五位数。从他的个位数开始数,去掉一个,位数加一。12345就是丢掉五位,所以是五位数字。所以利用循环就可以解决。

具体代码为:
 

while(n!=0)//当n不为0时,执行这个循环

    {
        n/=10;//去位数
        count++;
    }

现在的问题是如何去掉位数。可以用n/=10来解决。12345/10—1234.5因为是整除所以为1234(整数除以整数是整数)。

在定义一个计数器count,去一位就加一,直到0为止。

具体代码为下:

#include<stdio.h>
int num(long n)
{
	int count=0;//定义计数器
	if(n==0)//如果n是0的话,直接位数是1
		return 1;
	while(n!=0)//当n不为0时,执行这个循环
	{
		n/=10;//去位数
		count++;
	}
	return count;
}
int main()
{
	printf("%d\n",num(123456));
	return 0;
}

2.分别输出每一位数字。

这个问题的关键是如何得到最高位。用12345举例:1 2 3 4 5 得到最高位将它输出,再舍去最高位,一直到0为止。

得到最高位的办法是12345/10000(取整数)(具体不固定),然后%=10000(取余数,舍去最高位)。

int fig=num(n);//得到n的位数
	int power=pow(10.0,fig-1);//求出应除10的几次方
	while(n!=0)
	{
		printf("%d ",n/power);//得到最高位
		n%=power;//丢掉最高位
		power/=10;
	}

10000这个数不确定的原因是,它是根据输入数字的位数变化的,如果输入的数字为1234那么就为1000,以此类推。

而我们第一问已经求过输入数字是几位数

int num(long n)
{
	int count=0;
	if(n==0)
		return 1;
	while(n!=0)
	{
		n/=10;
		count++;
	}
	return count;
}

还有一个问题就是去掉最高位后数字的位数会减一。例如12345去掉最高位后变为2345本来由除10000变为除1000。解决这个问题的办法就是在每次循环的时候给10000(不确定)除以10,%=10。

power/=10;//每次循环都除以10,以确保与位数相对

所以具体代码为下:

int num(long n)
{
	int count=0;
	if(n==0)
		return 1;
	while(n!=0)
	{
		n/=10;
		count++;
	}
	return count;
}
void shun(long n)
{
	if(n==0)
		printf("0\n");
	int fig=num(n);//得到n的位数
	int power=pow(10.0,fig-1);//求出应除10的几次方
	while(n!=0)
	{
		printf("%d ",n/power);//得到最高位
		n%=power;//丢掉最高位
		power/=10;
	}
}
int main()
{
	shun(12345);
	return 0;
}

3.按逆序输出各位数字。

这一问只需要在第一问中丢弃的那一步之前加上打印,意思打印完以后再去掉就可以解决(得到个位再丢弃个位,直到数字为0)。

还是用12345举例子,这是个五位数。得到个位 %10,丢弃个位/=10。

代码如下:

while(n!=0)
	{
	printf("%d ",n%10);//直接输出得到的个位
	n/=10;//去掉个位
	}

按逆序输出各位数字的具体代码为:

void num(long n)
{
	if(n==0)
		printf("0\n");
	while(n!=0)
	{
	printf("%d ",n%10);//直接输出得到的个位
	n/=10;//去掉个位
	}
}
int main()
{
	num(123456);
	return 0;
}

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
一些经典的习题 【程1】 题目:古典问题:有一对兔子,从生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 【程2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程3】 题目:打印所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程分析:利用for循环控制100-999个数,每个数分解个位,十位,百位。 【程4】 题目:将一个整数分解质因数。如:输入90,打印90=2*3*3*5。 程分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印即可。 (2)如果nk,但n能被k整除,则应打印k的值,并用n除以k的商,作为新的整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 【程5】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 1.程分析:(a>b)?a:b这是条件运算符的基本子。 【程6】 题目:输入两个整数m和n,其最大公约数和最小公倍数。 1.程分析:利用辗除法。 【程7】 题目:输入一行字符,分别统计其中英文字母、空格、数字和其它字符的个数。 1.程分析:利用while语句,条件为输入的字符不为'\n'. 【程8】 题目:s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程分析:关键是计算每一项的值。 【程9】 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。如6=1+2+3.编程 找1000以内的所有完数。 【程10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,它在 第10次落地时,共经过多少米?第10次反弹多高? 【程11】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 【程12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%, 高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,应发放奖金总数? 1.程分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 【程13】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: public class FullSquare { public static void main(String[] args) { int t = 0; for (int i = 1; i <= 100; i++) { t = i + 100; for (int j = 1; j <= 100; j++) { if (t == j * j) { t = t + 168; for (int p = 1; p <= 100; p++) { if (t == p * p) System.out.println(i); } } } } } } 【程14】 题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程分析:以3月5日为,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。 import java.util.Scanner; //题目:输入某年某月某日,判断这一天是这一年的第几天 public class ThisDayIs { public static void main(String[] args) { System.out.println("请输入年份,如:2008"); Scanner YMD = new Scanner(System.in); int year = YMD.nextInt(); System.out.println("请输入月份1~12,如8"); int month = YMD.nextInt(); System.out.println("请输入天数1~31,如8"); int day = YMD.nextInt(); if (LeapYear(year)) { switch (month) { case 1: { System.out.println("这是" + year + "的第" + day + "天"); break; } case 2: { day = day + 31; System.out.println("这是" + year + "的第" + day + "天"); break; } case 3: { day = day + 29 + 31; System.out.println("这是" + year + "的第" + day + "天"); break; } case 4: { day = day + 29 + 31 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 5: { day = day + 29 + 31 * 2 + 30; System.out.println("这是" + year + "的第" + day + "天"); break; } case 6: { day = day + 29 + 31 * 3 + 30; System.out.println("这是" + year + "的第" + day + "天"); break; } case 7: { day = day + 29 + 31 * 3 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 8: { day = day + 29 + 31 * 4 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 9: { day = day + 29 + 31 * 5 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 10: { day = day + 29 + 31 * 5 + 30 * 3; System.out.println("这是" + year + "的第" + day + "天"); break; } case 11: { day = day + 29 + 31 * 6 + 30 * 3; System.out.println("这是" + year + "的第" + day + "天"); break; } case 12: { day = day + 29 + 31 * 6 + 30 * 4; System.out.println("这是" + year + "的第" + day + "天"); break; } } } else switch (month) { case 1: { System.out.println("这是" + year + "的第" + day + "天"); break; } case 2: { day = day + 31; System.out.println("这是" + year + "的第" + day + "天"); break; } case 3: { day = day + 28 + 31; System.out.println("这是" + year + "的第" + day + "天"); break; } case 4: { day = day + 28 + 31 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 5: { day = day + 28 + 31 * 2 + 30; System.out.println("这是" + year + "的第" + day + "天"); break; } case 6: { day = day + 28 + 31 * 3 + 30; System.out.println("这是" + year + "的第" + day + "天"); break; } case 7: { day = day + 28 + 31 * 3 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 8: { day = day + 28 + 31 * 4 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 9: { day = day + 28 + 31 * 5 + 30 * 2; System.out.println("这是" + year + "的第" + day + "天"); break; } case 10: { day = day + 28 + 31 * 5 + 30 * 3; System.out.println("这是" + year + "的第" + day + "天"); break; } case 11: { day = day + 28 + 31 * 6 + 30 * 3; System.out.println("这是" + year + "的第" + day + "天"); break; } case 12: { day = day + 28 + 31 * 6 + 30 * 4; System.out.println("这是" + year + "的第" + day + "天"); break; } } } private static boolean LeapYear(int year) { if (year % 4 == 0 || year % 100 == 0){ System.out.print(year+"是闰年"); return true; } else return false; } } import java.util.Scanner; //题目:输入某年某月某日,判断这一天是这一年的第几天 public class ThisDayIs { public static void main(String[] args) { System.out.println("请输入年份,如:2008"); Scanner YMD = new Scanner(System.in); int year = YMD.nextInt(); System.out.println("请输入月份1~12,如8"); int month = YMD.nextInt(); System.out.println("请输入天数1~31,如8"); int day = YMD.nextInt(); int[] temp = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (LeapYear(year)) { temp[2] = temp[2] + 1; for (int i = 0; i < month; i++) { day += temp[i]; } System.out.println("这是" + year + "的第" + day + "天"); } else { for (int i = 0; i y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 import java.util.Scanner; //题目:输入三个整数x,y,z,请把这三个数由小到大输出。 public class CompareThreeNumber { public static void main(String[] args) { System.out.println("请输入三个数"); Scanner Three = new Scanner(System.in); int xThree = Three.nextInt(); int yThree = Three.nextInt(); int zThree = Three.nextInt(); int temp; if (xThree >= yThree) { temp = xThree; xThree = yThree; yThree = temp; if (yThree >= zThree) { temp = yThree; yThree = zThree; zThree = temp; if (xThree >= yThree) temp = xThree; xThree = yThree; yThree = temp; } } else if (yThree >= zThree) { temp = yThree; yThree = zThree; zThree = temp; if (xThree >= yThree) { temp = xThree; xThree = yThree; yThree = temp; } } System.out.println(xThree + "<" + yThree + "<" + zThree); } } 【程16】 题目:输出9*9口诀。 1.程分析:分行与列考虑,共9行9列,i控制行,j控制列。 //题目:输出9*9口诀。 public class Formula99 { public static void main(String[] args) { for (int row = 1; row <= 9; row++) { for (int line = 1; line = 1;day--){ sum = (sum + 1) *2; System.out.println("第"+(day)+"天一共有"+sum+"个桃子"); } } } 【程18】 题目:两个乒乓球队进行比赛,各三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比,请编程三队赛手的名单。 1.程分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程19】 题目:打印如下图案(菱形) * *** ****** ******** ****** *** * 1.程分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。 【程20】 题目:有一分数列:2/1,3/2,5/3,8/5,13/8,21/13...这个数列的前20项之和。 1.程分析:请抓住分子与分母的变化规律。 //题目:有一分数列:2/1,3/2,5/3,8/5,13/8,21/13...这个数列的前20项之和。 public class FractionSum { public FractionSum() { double sum = 0; for (double i = 2; i <= 20; i++) sum += F(i) / F(i - 1); System.out.println("这20项的结果是:" + sum); } public double F(double j) { if (j == 1) return 1; else if (j == 2) return 2; else return F(j - 1) + F(j - 2); } public static void main(String[] args) { new FractionSum(); } } 【程21】 题目:1+2!+3!+...+20!的和 1.程分析:此程只是把累加变成了累乘。 //题目:1+2!+3!+...+20!的和 public class Factorial { public Factorial() { int sum = 0; for (int i = 1; i <= 20; i++) { int temp = 1; for (int j = 1; j <= i; j++) { temp *= j; } sum += temp; } System.out.println("前20个数的阶乘和为" + sum); } public static void main(String[] args) { new Factorial(); } } //题目:1+2!+3!+...+20!的和 public class Factorial { public Factorial() { int sum = 0; for (int i = 1; i <= 4; i++) { sum += F(i); } System.out.println("前20个数的阶乘和为" + sum); } public int F(int n) { if (n == 1) return 1; else return n * F(n - 1); } public static void main(String[] args) { new Factorial(); } } 【程22】 题目:利用递归方法5!。 1.程分析:递归公式:fn=fn_1*4! public class Recursion { public Recursion(int number) { System.out.println(number+"的阶乘是:"+F(number)); } public int F(int n) { if (n == 1) return 1; else return n * F(n - 1); } public static void main(String[] args){ new Recursion(5); } } 【程23】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 1.程分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。 【程24】 题目:给一个不多于5位的整数要求:一、它是几位数,二、打印各位数字。 【程25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 【程26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 1.程分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。 【程27】 题目:100之内的素数 【程28】 题目:对10个数进行排 1.程分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。 【程29】 题目:一个3*3矩阵对角线元素之和 1.程分析:利用双重for循环控制输入二维数组,再将a[ i ][ i ]累加后输出。 【程30】 题目:有一个已经排好的数组。现输入一个数,要求按原来的规律将它插入数组中。 1. 程分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。 【程31】 题目:将一个数组输出。 1.程分析:用第一个与最后一个交换。 import java.util.Scanner; //题目:将一个数组输出。 public class ArrayReverse { public ArrayReverse() { System.out.println("输入一个数指明数组长度"); Scanner number = new Scanner(System.in); int n = number.nextInt(); System.out.println("输入一个数组"); int[] Array = new int[n]; Reverse(Array); } public void Reverse(int[] Array) { Scanner array = new Scanner(System.in); for (int i = 0; i = 0; i++, j--) { int x, y; x = Array[i]; y = Array[j]; Array[j] = x; Array[i] = y; if (i >= j) break; } for (int i = 0; i < Array.length; i++) System.out.print(Array[i] + " "); } public static void main(String[] args) { new ArrayReverse(); } } 【程32】 题目:取一个整数a从右端开始的4~7位。 程分析:可以这样考虑: (1)先使a右移4位。 (2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4) (3)将上面二者进行&运算。 【程33】 题目:打印杨辉三角形(要求打印10行如下图) 1.程分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 【程34】 题目:输入3个数a,b,c,按大小顺输出。 1.程分析:利用指针方法。 【程35】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 【程36】 题目:有n个整数,使其前面各数顺向后移m个位置,最后m个数变成最前面的m个数 【程37】 题目:有n个人围成一圈,顺排号。从第一个人开始报数(从1到3报数),凡报到3的人退圈子, 问最后留下的是原来第几号的那位。 【程38】 题目:写一个函数,一个字符串的长度,在main函数中输入字符串,并输出其长度。 【程39】 题目:编写一个函数,输入n为偶数时,调用函数1/2+1/4+...+1/n,当输入n为奇数时, 调用函数1/1+1/3+...+1/n(利用指针函数) 【程40】 题目:字符串排。 【程41】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 【程42】 题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。??代表的两位数,及809*??后的结果。 【程43】 题目:0—7所能组成的奇数个数。 【程44】 题目:一个偶数总能表示为两个素数之和。 【程45】 题目:判断一个素数能被几个9整除 【程46】 题目:两个字符串连接程 【程47】 题目:读取7个数(1—50)的整数值,每读取一个值,程打印该值个数的*。 【程48】 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 【程49】 题目:计算字符串中子串现的次数 【程50】 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算平均成绩,况原有的数据和计算的平均分数存放在磁盘文件"stud"中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值