求正整数的第k位。作为初学者,真心跪了

求正整数的第k位。。。作为菜鸟,真心跪了题目要求如下:编写函数digit(n, k),使得函数返回正整数n中的第k位数

求正整数的第k位。。。作为菜鸟,真心跪了
题目要求如下:
 编写函数digit(n, k),使得函数返回正整数n中的第k位数字(从左边算起)。例如digit(83456, 2),返回3。当k大于n的实际位数时,返回-1。

 输入文件包含多组数据,每组数据包含2个正整数,分别对应题目中的n, k。输入以EOF结束。

 对于每组数据,输出一行,输出结果为函数digit(n, k)的返回值。
输入(例子):

83456 2
123 4
输出(例子)

3
-1



[解决办法]

C/C++ code
#include<iostream>#include<string>using namespace std;int digit(int n, int k){    int num[25],index=0;    memset(num,0,sizeof(num));    while (n>0)    {        num[index++] = n % 10;        n = n / 10;    }    if(index<k) return -1;    return num[index - k];}int main(){        int n,k;    while(scanf("%d %d",&n,&k)!=EOF)    {        cout<<digit(n,k)<<endl;    }    return 0;}
[解决办法]
探讨
C/C++ code

#include<iostream>
#include<string>
using namespace std;

int digit(int n, int k)
{
int num[25],index=0;
memset(num,0,sizeof(num));
while (n>0)
{
num[in……

[解决办法]
探讨
[Quote=引用:]

那你题目怎么跟我们一模一样。。。
题目描述

 编写函数digit(n, k),使得函数返回正整数n中的第k位数字(从左边算起)。例如digit(83456, 2),返回3。当k大于n的实际位数时,返回-1。
输入格式

 输入文件包含多组数据,每组数据包含2个正整数,分别对应题目中的n, k。输入以EOF结束。
输出格式

 对于每……

[解决办法]
#include<math.h>
int GetKNum(int val,int k) //val是所给的数, k是第k位
{
if( val<(int)pow((double)10,(double)k) )
return -1;
else
return ( val/(int)pow( (double)10,(double)k ) ) %10
}
[解决办法]
C/C++ code
#include <stdio.h>unsigned int countDigit(unsigned int n){    int count = 0;    while(n != 0)//计算一个正整数有多少位    {        n /= 10;        count++;    }    return count;}unsigned int digit(unsigned int n, unsigned int k){    int num;    unsigned int count = countDigit(n);    if(k > count)    {        num = -1;     }    else    {        int order = count - k + 1; //左边数第k位, 右边数是第count - k + 1位        for(int i=0; i<order; i++)        {            num = n % 10;            n /= 10;        }    }    return num;}int main(void) {    unsigned int number = 232045;    unsigned int k = 2;    int dgt = digit(number, k);    printf("%d %d\n",number, dgt);    return 0; }
[解决办法]
读取一个字符串s和一个整数a
输出s的第a个字符

思路就这么简单
至于代码,如果你不想十年之后还在问这种问题的话,就自己写代码
[解决办法]
C/C++ code
#include<iostream>#include<string>#include<sstream>#include<deque>using namespace std;struct data{    unsigned int num;    unsigned int k;};string inttostring(int m){    ostringstream oss;    oss<<m;    string str(oss.str());    return str;}int main(){    int n;    cout<<"输入数据组个数:";    cin>>n;    cout<<endl;    deque<data> vdata;    cout<<"输入数据"<<endl;    for(int i=0; i<n;i++)    {        data data;        cin>>data.num>>data.k;        vdata.push_back(data);        //cout<<endl;    }    cout<<"结果输出";    for(int i=0;i<vdata.size();++i)    {        string str(inttostring(vdata[i].num));        if(str.length()<vdata[i].k)        {            cout<<-1<<endl;        }        else        {            cout<<str.at(vdata[i].k-1)<<endl;        }    }    return 0;} 


[解决办法]
public void digit(int n, int k){
char [] data = String.valueOf(n).toCharArray();
if (k > data.length) {
System.out.println("-1");
} else {
System.out.println(data[k-1]);
}
}
[解决办法]

探讨

引用:
14楼大神。。。代码在哪里

我的意思只是提醒题目中不限制正整数的最大值是不行的。