求正整数的第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
------解决方案--------------------
题目要求如下:
编写函数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; }
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
#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; }