得到一个数字中每一位的数字

学习编程也有一段时间了,随着学习的不断深入,我越来越体会到了算法的重要性,最近遇到了一些非常有意思的算法,比如打印水仙花数、将数字逆置,在这两个算法中会用到一个数字钟每一位的值

如:判断数字123是否是水仙花数需要得到每一位的数字

通常计算每一位的数字的算法是:

个位:a = 123 % 10 = 3

十位:b  = 123 %100 / 10 = 2

百位::c = 123 % 100 = 2

随着位数的越来越大,这种方法满足不了程序的需求

比如计算:123445677777777777777777777每一位的数字使用上面的方法肯定是不行的

最近我学了一种比较好的方法:

为了便于理解这种方法,我用前面的例子使用这种方法计算123中每一位的值

需要计算的数字:

1 2 3

首先定义变量  j = 123

m = 0

第一步:求出个位上的数字

m = j % 10 = 123 % 10 = 3

j = j / 10 =  123 / 10 = 12;//将三位数变成两位数

第二步:求出十位上的数字

m = j % 10 = 12 % 10 = 2

j = j / 10 = 12 / 10 = 1//将两位数变成一位数

第三步:求出百位上的数字

m = j % 10 = 1 % 10 = 1

j = j / 10 = 1 / 10 = 0//将数字清零

最后得到个位上的数字是3,十位上的数字是2, 百位上的数字是1

程序代码:

#include <stdio.h>
#include <stdlib.h>

void main()
{
	int num;
	int i = 0;

	printf("请输入一个数字:");
	scanf("%d", &num);

	while(num>0)
	{
		i = num % 10;//计算每一位上的数字

		printf("%d\n", i);//打印每一位数字

		num = num / 10;//实现位与位之间的遍历
	}

	system("pause");
}

测试程序:

当输入123时

当输入一个比多位数时:比如12341221



得到一个数字中每一位的数字,布布扣,bubuko.com

时间: 2024-08-05 11:01:12

得到一个数字中每一位的数字的相关文章

剑指Offer对答如流系列 - 数字序列中某一位的数字

面试题44:数字序列中某一位的数字 题目描述 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等.请写一个函数求任意位对应的数字. 问题分析 这个寻求高效的解决方法,也是寻找规律: 个位数的个数一共有10个,即0~9,共占了10*1位数字:(特殊) 两位数的个数一共有90个,即10~99,每个数字占两位,共占了90*2位数字: -- m位数的个数一共有9*10^(m-1)个,每个数字占m位,

《剑指offer》第四十四题:数字序列中某一位的数字

// 面试题44:数字序列中某一位的数字 // 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中.在这 // 个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等.请写一 // 个函数求任意位对应的数字. #include <iostream> #include <algorithm> using namespace std; int countOfIntegers(int digits); int digitAtIndex(

57. 数字序列中某一位的数字 (不懂)

算法1 以第15位数字1为例(1隶属与12,两位数,位于12从左侧以0号开始下标为0的位置)步骤1:首先确定该数字是属于几位数的;如果是一位数,n<9;如果是两位数,n<9+90X2=189;说明是两位数.因为是从0开始数数.0-9可以表示10个数字,从0开始数可以表示到9.10-99一共有90X2个数字,所以数到两位数能够数到9+90X2=189.步骤2:确定该数字属于哪个数.10+(15-10)/2= 12.步骤3:确定是该数中哪一位.15-10-(12-10)*2-1 = 0, 所以位于

数字序列中某一位的数字

数字按照0123456789101112131415161718192021-的顺序排列.第5位(从0开始计数)为5,第13位为1,第19位为4-- 求任意第n位对应的数字. 思路: 直观方法做枚举.每枚举一个数字的时候,求出该数字是几位数,并把数字的位数和前面的所有数字的位数相加.当累加的数位大于n时,那么第n位数字一定在这个数字里. 以第15位数字2为例(2隶属与12,两位数,位于12从左侧以0号开始下标为1的位置) 步骤1:首先确定该数字是属于几位数的; 如果是一位数,n<9;如果是两位数

剑指offer:数字序列中某一位的数字

题目描述数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等.请写一个函数,求任意第n位对应的数字. # -*- coding: utf-8 -*- # @Time : 2019-07-09 22:51 # @Author : Jayce Wong # @ProjectName : job # @FileName : digitAtIndex.py # @Blog : https://blog

剑指offer-面试题44-数字序列中某一位的数字-脑筋急转弯

/* 题目: 数字以0123456789101112131415…的格式序列化到一个字符序列中. 在这个序列中,第5位(从0开始计数,即从第0位开始)是5,第13位是1,第19位是4,等等. 请写一个函数,求任意第n位对应的数字. */ #include<iostream> #include<string.h> using namespace std; //自己实现pow,使用codeblocks中的pow,会转化为浮点数进行截断,得到的结果不准确. int pow(int num

统计一个字符串中字母、空格和数字的个数

public class Test3 { public static void main(String[] args) { String s1 = "I am"; String s2 = " a student"; String s3; String s4; s3 = s1 + s2; s4 = s3.substring(7, 8); //System.out.println(s3);//连接两个字符串 //System.out.println(s4);//求出第7

用java编程在10000到99999中的数字中找到aabcc类型的数字

package com.diyo.offer; public class FindNum { public static void main(String[] args) { int count = 0;// 用于统计找的AABCC类型的数字的个数 for (int i = 10000; i <= 99999; i++) { if (isNum(i)) { System.out.print(i + "\t"); count++; if (count % 5 == 0) {// 每

反转一个值中的最后n位

这是在<使用位运算显示二进制数>的基础上进一步扩展,实现反转一个值中最后n位,参数为n和要反转的值. ~可以一个字节中所有的位,而不是选定的少数位.为达到指定要求,需创建一个掩码,该掩码最后n位设为1,其余的位设为0.然后,对该掩码和一个值使用^运算就可以转置这个值得最后n位,同时保留该值的其他位不变. 1 //使用位操作符来显示二进制并翻转该值的最后n位 2 #include<stdio.h> 3 char *itobs( int, char*); //integer to bi