注册 登录
编程论坛 C++教室

输入一个任意数,求它的个位数

blueness21 发布于 2007-08-03 21:46, 3675 次点击
请问怎么在输入一个任意数字后,输出它的个位数?
我想了下。..没想出来。
46 回复
#2
blueness212007-08-03 21:54
好累...先下了,明天来看.
#3
aipb20072007-08-03 23:15
% 10
#4
blueness212007-08-04 11:31

呃,以前不知道几百次见过。就是懒得去考虑,原来就是那么简单。..
谢谢提点!

#5
wingyip2007-08-05 07:15
就这么简单,呵呵。3楼的够爽快啊。
#6
blueboy820062007-08-05 11:44

是任意数吗??

那似乎没那么简单吧!!?

#7
野比2007-08-05 18:39

你不会是想解决任意进制的输入吧?...楼上..?

#8
狂人老大2007-08-06 23:24
输入的数值不一定是2位数啊
#9
狂人老大2007-08-06 23:32
if(m/10!=0)
m=m%10;
#10
Maltase2007-08-07 22:36
{
int a,b;
printf("输入一个任意数:\n");
scanf("%d",&a);
b=a%10;//a%10就是求出他的各位数
printf("输入的数字是%d",a);
printf("它的个位数字是%d",b);
}

这几天学的东西。。。献丑下,望有不对的地方各位指教
#11
狂人老大2007-08-08 00:06

要用C++的啊
#12
狂人老大2007-08-08 00:10
cout<<m<<endl;
while(m/10!=0)
m=m%10;
cin>>m>>endl;
#13
野比2007-08-08 21:06
以下是引用狂人老大在2007-8-6 23:24:34的发言:
输入的数值不一定是2位数啊

A%B 取模... 返回值的值域是 [0, B-1] 闭区间....

#14
lijy5202007-08-08 21:38

cin>>m>>endl;
a=m%10;
cout<<a<<endl;

#15
狂人老大2007-08-08 21:56
cin>>m>>endl;
while(m/10!=0)
m=m%10;
cout<<m<<endl;
#16
aipb20072007-08-08 22:05
以下是引用狂人老大在2007-8-8 21:56:30的发言:
cin>>m>>endl;
while(m/10!=0)
m=m%10;
cout<<m<<endl;

为什么你要这么坚持的用while?

#17
狂人老大2007-08-08 22:20
坚持!坚持!
while循环可以判断输入的数值不止是2位数的啊
如果遇到多位数呢
#18
aipb20072007-08-08 22:46
以下是引用狂人老大在2007-8-8 22:20:59的发言:
坚持!坚持!
while循环可以判断输入的数值不止是2位数的啊
如果遇到多位数呢

1%10 1
12%10 2
123%10 3
1234%10 4
12345%10 5
123456%10 6
1234567%10 7
…………………………

#19
狂人老大2007-08-09 10:13
我的错
我有罪
#20
lijy5202007-08-09 19:02
搞不懂
“任意数%10=个位”
#21
terisevend2007-08-09 22:19

aipb2007的那个是特例...
例如:
124%10 = 4...
因为123,1234,12345最后一位数刚好是它们的位数...aipb2007愚弄了大家一下...


int a, m = 1;
std::cin >> a;
while( a>=10 ) a/=10, m++;
std::cout << m << std::endl;
就可以了...

#22
DMC_YA2007-08-09 23:49
狂人老大的算法通俗易懂,aipb2007的算法比较精简而不是一个特例!

%是求余运算符号,求余运算就是指一个数除以另一个数直到不能整除时所剩下的值,也就是指余数。举个例子:

128%10 验证结果为8 运算过程如下

第一次:128%10=28

第二次:28%10=8

第三次:8%10=8

那么很容易看出来,%运算其实是一个循环过程,也就是说一定会取到个位上的数字才退出求余运算。

那么为什么要选取余10这个数而不是其他数字呢,因为我们需要求的是个位上的数,个位数绝对不会大于10,而0-9内的任意数%10都等于他本身,所以选定%10而不是其他数字.

我们可以得出一个结论,个位%10 两位%100 三位%1000。。。。
#23
小糊涂仙2007-08-10 00:16
我觉得应该对这个"任意数"进行一下强制类型转换,(int)任意数,考虑到任意数有可能为小数!
#24
aipb20072007-08-10 02:16

本来这个简单至极的问题,我不想再回答了,但是看到这么多人在误解大家,还是说两句:

to terisevend:
楼主要求的是个位,不是多少位。ex:321 个位1,位数3。

to DMC_YA:
你就更离谱了,一堆错道理还可以说这么多???
128%10 验证结果为8 运算过程如下

第一次:128%10=28 //?????????????????????????

第二次:28%10=8

第三次:8%10=8
上面的答案我很想知道你是用什么验证的?你去用个编译器运行下OK?
有层楼里野比也说了
对一个数求模,a%b得到值是[0,b)。

#25
小糊涂仙2007-08-10 02:45
回复:(blueness21)输入一个任意数,求它的个位数
这个是我写的一个求模程序,结果是小数哦

只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2007-8-10 2:47:35编辑过]

#26
DMC_YA2007-08-10 11:48

TO aipb2007: 其实我说的那个

第一次:128%10=28

第二次:28%10=8

第三次:8%10=8

是指程序在求128%10的过程,也就是这整个过程在我们人脑中的运算过程,我只是想说明白一下128%10=8中的这个8是怎么来的。求余过程就是这样,如果不是还请多多指教。

而为什么对一个数求模,a%b得到值是[0,b),就是因为我们需要求的余数,余数绝对不会大于b,我们用10的话就不会大于10,也就刚好适合我们求个位数字。

这是我上面回答的,是些原理性的东西,你可以用短除方式看看求一个数的余数是不是上面的那些过程。

#27
百年不亮2007-08-10 12:14
大家数学学到哪里去了?
a mod b 是什么意思? 就是用a去除b算余数,做除法最后得到余数不会吗?
#28
DMC_YA2007-08-10 12:27
顶楼上
#29
aipb20072007-08-10 12:46
以下是引用DMC_YA在2007-8-10 11:48:45的发言:

TO aipb2007: 其实我说的那个

第一次:128%10=28

第二次:28%10=8

第三次:8%10=8

是指程序在求128%10的过程,也就是这整个过程在我们人脑中的运算过程,我只是想说明白一下128%10=8中的这个8是怎么来的。求余过程就是这样,如果不是还请多多指教。

而为什么对一个数求模,a%b得到值是[0,b),就是因为我们需要求的余数,余数绝对不会大于b,我们用10的话就不会大于10,也就刚好适合我们求个位数字。

这是我上面回答的,是些原理性的东西,你可以用短除方式看看求一个数的余数是不是上面的那些过程。

彻底无语!
128 % 10, 的原理就是商12余8

结贴了!

#30
anthony6342007-08-10 13:12

睡个午觉

[此贴子已经被作者于2007-8-10 13:15:40编辑过]

#31
野比2007-08-10 13:12
呵呵...aipb被玩哭了...
我明白DMC_YA的初衷... 他是想演示一下操作过程...
不过有点错...

to DMC_YA:
求模的过程是这样的
A % B = A - int(A / B)


酱紫的...

to 小糊涂仙:
...
那个... 你还真是人如其名... 不服都不行了...
谁告诉你的求模可以求出小数来的?...

to 狂人老大:
我实在佩服...
一直在用最笨笨的方法思考...
(说的不好听不要怪我, 事实..)
很显然你一直没有从根本上理解求模 ....
你的方法太过死板..而且你模来模去模了那么多次...中间结果有用吗? 哪去了?..
看下我上面写的红字...再改进下你的程序吧...
#32
kame2007-08-10 15:26
#include<iostream.h>
void main()
{
int m,int n;
cin>>m;//输入一个数
while(m/10!=0)//判断被10整除是否为0,不是则循环
{
n=m%10; //取得个位数放入n中
m=m/10; //把取得的个位数删除,得到一个新的m
cout<<n; //依次输出取得的个位数

}
if(m/10==0)//当m小于10输出
cout<<m;
}
#33
blueness212007-08-10 18:13

想不到额一个小小的问题引起那么大的争论。..相当有意思啊哈哈
大家一起讨论问题是很快乐的事!~

#34
狂人老大2007-08-10 22:41
回复:(aipb2007)以下是引用DMC_YA在2007-8-10 11:4...
同意
#35
小糊涂仙2007-08-10 22:45

那请问,我要求134.45的个位数字,你们怎么取?
直接用134.45%10吗?
反正我在Turbo C 和VC6上运行都会报错.在JAVA上运行会算出小数.
我的意思是先(int)123.45,再%10!

#36
野比2007-08-11 00:53

是吗? 那很明显你的程序和你的初衷不符...

[IMG]http://bbs.bc-cn.net/showimg.asp?BoardID=56&filename=2007-8/20078102472211831.jpg[/IMG]
#37
terisevend2007-08-11 01:39
晕死...我把个位看成位数了.....aipb没错
#38
狂人老大2007-08-11 03:11
这个问题可以告一段落了
#39
曦木2007-09-11 10:10
//用c++编译
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int Array;
char s='y';
while(s=='y'){
cout<<"请输入一位数:";
cin>>Array;
int i=Array,j=0;
while(i!=0){
i=i/10;
j++;
}
cout<<"这个数是"<<j<<"位数"<<endl;
cout<<"继续输入请输入y,退出请输入其他:";
cin>>s;
}
system("pause");
}
#40
曦木2007-09-11 10:20
//用类型强制转换
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
float s;
int k;
char m='y';
while(m=='y'){
cout<<"请输入一位数:";
cin>>s;
k=(int)s;
k=k%10;
cout<<"他的个位数是"<<k;
cout<<"继续输入请输入y,退出请输入其他:";
cin>>m;
}
system ("pause");
}
#41
曦木2007-09-11 10:20
开始看成求位数去了
#42
远去的列车2007-09-11 10:31
哈哈,大家搞得真是复杂啊,看来都很闲
#43
yandongdido2007-09-11 12:20
任意数 不包括float吗
#44
yandongdido2007-09-11 12:27
我觉得应该用到enum
#include<iostream.h>
void main()
{
enum m{int,float,double},enum n{int,double,float};
cin>>m;//输入一个数
while(m/10!=0)//判断被10整除是否为0,不是则循环
{
n=m%10; //取得个位数放入n中
m=m/10; //把取得的个位数删除,得到一个新的m
cout<<n; //依次输出取得的个位数

}
if(m/10==0)//当m小于10输出
cout<<m;
}
这样是不是更好一点啊!
请大家提点意见
#45
yuyunliuhen2007-09-11 12:41
#46
snakeImao2007-09-11 13:16
以下是引用blueness21在2007-8-3 21:46:08的发言:
请问怎么在输入一个任意数字后,输出它的个位数?
我想了下。..没想出来。

#include"iostream"
using namespace std;
void main()
{
int a;
cout<<"请输入任意一个数:"<<endl;
cin>>a;
if(a<0)
cout<<"个位数为:"<<(a%10)*(-1)<<endl;
else
cout<<"个位数为:"<<a%10<<endl;
}

#47
cince2007-09-11 18:44
以下是引用Maltase在2007-8-7 22:36:13的发言:
{
int a,b;
printf("输入一个任意数:\n");
scanf("%d",&a);
b=a%10;//a%10就是求出他的各位数
printf("输入的数字是%d",a);
printf("它的个位数字是%d",b);
}

这几天学的东西。。。献丑下,望有不对的地方各位指教

你还不如第三楼上的写的好..%10

简单明了

1