一个int比如322,我想找happy number就得3平方加2平方再加2平方,怎样找到一个一个的数字,就是322%10,得到2,然后/10,然后再%,就可以依次求得每位上的数字
happy number中需要考虑的循环的问题,处理循环可以用链表找循环的方式,两个指针。
学习编程也有一段时间了,随着学习的不断深入,我越来越体会到了算法的重要性,最近遇到了一些非常有意思的算法,比如打印水仙花数、将数字逆置,在这两个算法中会用到一个数字钟每一位的值
如:判断数字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
JAVA入门基础知识积累
获取一串数字中每一位数的小技巧
假定有一个五位数 57648 ,我们要获取他的万位、千位、百位、十位、个位的每一个数值,有一个比较方便的做法,不用去做字串截取。
// 数值 57648 int num= 57648; // 万位 除以一万 int wanWei = num / 10000;// 利用自动类型转换获取得到 5 以下同理 // 千位 以一万取余,然后除以一千 int qianWei = num % 10000 / 1000;// 得到 7 // 百位 以一千取余,然后除以一百 int baiWei = num % 1000 / 100;// 得到 6 // 十位 以一百取余,然后除以十 int shiWei = num % 100 / 10;// 得到 4 // 个位 以十取余 int geWei = num % 10;// 得到 8
谢谢大家!
今天我来讲解一下C语言中有关于于处理数字的一些问题,有“丢弃 “和“ 得到“对应位上的数字的方法,常常可以用来解决一些顺序输出每个数字,逆序输出每个数字,判断数字位数等问题。
第一个问题:判断数字位数:
即任意给出一个数字n,要求统计输出n的位数。
思路分析: 该问题的处理方法有两种,即”丢个位“与”丢高位“。”丢个位“即对n进行除以10操作,并将其赋值给下一次除以10操作的n,每进行一次操作,计数器加1,直至n为0.统计输出计数器的个数即为n的位数(例:n=123,则n的”丢个位“过程为:123→12(123/10)→1(12/10)→0(1/10));”丢高位“即对n要进行取余操作,每次取余计数器加1,但每次取余时的除数不同(例:n=123,则n的”丢高位位“过程为:123→23(123%100)→3(23%10)→0(3%1)).
鉴于以上分析,我将在此展示“丢个位”的C语言代码,如下所示:
#include <stdio.h>
#include <math.h>
int Figure(int n)
{
int count = 0;
do
{
count++;
n /=10;
}while(n != 0);
return count;
}
int main()
{
//测试用例
printf("%d\n",Figure(0));
printf("%d\n",Figure(1));
printf("%d\n",Figure(12));
printf("%d\n",Figure(123456789));
printf("%d\n",Figure(-1));
printf("%d\n",Figure(-123456789));}
在以上代码实现过程中,我也试图用过while语句实现,但是未通过测试,在我使用测试用例‘0’进行测试的时候发现结果为‘0’,显然有误,这时要想到while和do-while的区别,do-while语句至少执行一次。
第二个问题:逆序输出每一位数字
即任意给出一个数字n,要求逆序输出各位上的数字
思路:得到个位数字,依次打印;
具体实现代码如下:
#include <stdio.h>
#include <math.h>
//逆序输出n的每一位
void PrintReverse(int n)
{
if(n < 0)
{
printf("-");
n = -n;
}
do
{
printf("%d ",n%10);
n /= 10;
}while(n != 0);
printf("\n");
}
int main()
{
//测试用例
PrintReverse(123456789);
PrintReverse(-123456789);
PrintReverse(0);
}第三个问题:顺序输出每一位数字
即任意给出一个数字n,要求正序输出各位上的数字。
结合数字的位数统计,在此可通过位数统计函数的调用(注意接收并进行赋值)进行代码实现,
#include <stdio.h>
#include <math.h>
int Figure(int n)
{
int count = 0;
do
{
count++;
n /=10;
}while(n != 0);
return count;
}
//顺序输出n的每位数字
void PrintOrder(int n)
{
int count = Figure(n);
int power = 1;
for(int i=0;i<count-1;i++)
{
power *= 10;
}
do
{
printf("%d ",n/power);
n %= power;
power /= 10;
}while(n != 0);
printf("\n");
}
int main()
{
//测试用例
PrintOrder(123456789);
PrintOrder(-123456789);
PrintOrder(0);}
以上就是我对近期学习的C语言数字处理部分的总结,欢迎各位同仁的指正。
一个int比如322,我想找happy number就得3平方加2平方再加2平方,怎样找到一个一个的数字,就是322%10,得到2,然后/10,然后再%,就可以依次求得每位上的数字
happy number中需要考虑的循环的问题,处理循环可以用链表找循环的方式,两个指针。
转载于:https://www.cnblogs.com/liumeng-blog/p/5251759.html