C语言编程,写一函数digit(n,k),它把数n从右边起的第k位数字的值给出来,其中n为正整数,若n的位数不足k

则为0,,求步骤及讲解。本人刚学了小半年,觉得编的程序还比较简单,可是现在程序越来越不会编了,网上的答案真心看不懂啊,求大神指导!... 则为0,,求步骤及讲解。本人刚学了小半年,觉得编的程序还比较简单,可是现在程序越来越不会编了,网上的答案真心看不懂啊,求大神指导! 展开
 我来答
你眼中_我蓝移
推荐于2017-11-25 · TA获得超过179个赞
知道答主
回答量:70
采纳率:0%
帮助的人:72.6万
展开全部
#include<stdio.h>

int digit(int n,int k)
{
int i,temp1,temp2;
for(i = 0;i < k; i++)
{
temp1 = n%10;
n = n/10;
}
return temp1;
}

void main()
{
int n,k,result;
printf("请输入数字n和k:\n");
scanf("%d %d",&n,&k);
result = digit(n,k);
printf("%d从右边数第%d位为%d",n,k,result);
}

很简单的,你先看看,不懂了再问。望采纳!
追问
temp1求得了n的余数,又返回去了,那i是表示这个数的位数吗,咋还是不明白这个程序是怎么运行的呢
追答
你想一下简单的嘛!假设k为1,那么for循环只执行一次,temp1不就是直接就是最后一位吗?这时候n就储存了n原来位数-1位。
举个简单的例子好懂一些。
比如你n = 12345;k = 4;
此时for循环会被执行4次
执行第一次循环结束时:temp1 = n%10 = 5;n = n/10 = 1234; i = 0
执行第二次循环结束时:temp1 = n%10 = 4;n = n/10 = 123; i= 1

执行第三次循环结束时:temp1 = n%10 = 3;n = n/10 = 12; i= 2

执行第四次循环结束时:temp1 = n%10 = 2;n = n/10 = 1; i= 3

i只是一个计数器,用来控制循环的,k控制循环几次。也就是取余几次。懂了没?
kaixingui2012
2013-04-26 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6261万
展开全部
#include <stdio.h>
int digit( int n , int k )
{
int i=1;
while(n) //当n不为0时循环
{
if ( i==k ) //如果当前位置i与k相同,则返回当前数字
return n%10 ;
n/=10 ; //n缩小10倍,为的是下次n%10为要取的数字
i++; //位置数+1
}
return 0 ; //找不到匹配位置时,返回0
}
int main()
{
int ret=0;
ret=digit(76543,4) ;
printf("digit(76543,4)=%d\n" , ret );
ret=digit(12,4) ;
printf("digit(12,4)=%d\n" , ret );
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
龍__鳳
2013-04-26 · TA获得超过2346个赞
知道小有建树答主
回答量:948
采纳率:0%
帮助的人:1391万
展开全部
程序给你了,你试下,不懂的可以追问:
#include<stdio.h>
int digit(int n,int k)
{
int t=k-1;
while(t>0)
{
n/=10;
t--;
}
if(n==0)
return 0;
else
return n%10;
}
void main()
{
int n,k;
scanf("%d%d",&n,&k);
printf("%d\n",digit(n,k));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一世安心步不变
2017-11-28
知道答主
回答量:1
采纳率:0%
帮助的人:915
引用你眼中_我蓝移的回答:
#include<stdio.h>

int digit(int n,int k)
{
int i,temp1,temp2;
for(i = 0;i < k; i++)
{
temp1 = n%10;
n = n/10;
}
return temp1;
}

void main()
{
int n,k,result;
printf("请输入数字n和k:\n");
scanf("%d %d",&n,&k);
result = digit(n,k);
printf("%d从右边数第%d位为%d",n,k,result);
}

很简单的,你先看看,不懂了再问。望采纳!
展开全部
没有分析k>n怎么办啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hdu我爱c语言
2013-04-26 · TA获得超过144个赞
知道答主
回答量:65
采纳率:0%
帮助的人:50.4万
展开全部
明白了,好的。
追问
如digit(76543)=6,digit(12,4)=0,结果为0
追答
#include
#include
void main()
{
void digit(char n[],int k);
int a=156963565;
char s[81];
sprintf(s,"%d",a);
digit(s,4);
}
void digit(char n[],int k)
{
int len=strlen(n);
if(k>len)
printf("0\n");
else
printf("%c\n",n[len-k]);
}

我是将数存在一个字符串中,也可以不用a,直接将一个数字串存在字符串中,这样可以进行很大数的表示
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式